Sublimetext2 Can';t在sublime text 2中杀死python进程

Sublimetext2 Can';t在sublime text 2中杀死python进程,sublimetext2,Sublimetext2,我搜索了很多地方,但我似乎找不到正确的关键字。我在Sublime中的Python中有一个暂停进程,它导致Mac上的死亡海滩球。我无法访问“工具”>“取消生成”按钮,Control+C无法工作。如何终止此进程?我没有找到一种方法可以在不终止所有Sublime的情况下终止Sublime中的进程。但我确实找到了一种方法,让杀戮和重开崇高变得不那么痛苦。这是我的路 命令选项escape:这将打开强制退出窗口 强制退出窗口将询问您是否真的要退出升华两次。只需按两次回车键 一个撞车报告窗口将打开。我讨厌这个

我搜索了很多地方,但我似乎找不到正确的关键字。我在Sublime中的Python中有一个暂停进程,它导致Mac上的死亡海滩球。我无法访问“工具”>“取消生成”按钮,Control+C无法工作。如何终止此进程?

我没有找到一种方法可以在不终止所有Sublime的情况下终止Sublime中的进程。但我确实找到了一种方法,让杀戮和重开崇高变得不那么痛苦。这是我的路

  • 命令选项escape:这将打开强制退出窗口
  • 强制退出窗口将询问您是否真的要退出升华两次。只需按两次回车键
  • 一个撞车报告窗口将打开。我讨厌这个窗口,因为它漂浮在所有东西的顶部,所以你不能忽略它,关闭它让我额外击键,所以我
  • 重新打开升华。当Sublime重新打开时,它会打开崩溃前打开的所有文件,将您带回原来的位置 许多人认为重新打开Sublime是件痛苦的事,因为他们必须用鼠标导航到应用程序目录,这个过程大约需要10-30秒。我以前觉得这很烦人,所以我设置了它,这样我就可以用五次击键重新打开sublime,而这大约需要三秒钟

    首先,我安装了。在这种情况下,您只需要免费版本的Alfred

    安装Alfred后,请执行以下操作:

  • 选项空格键打开Alfred搜索栏。阿尔弗雷德很像谷歌搜索你的电脑
  • 在Alfred搜索栏下方键入字母“su”。会出现一系列选项,第一个选项是Sublime Text 2。Alfred会自动突出显示其搜索结果列表中的第一项内容,这样当您按enter键时,它将启动突出显示的应用程序
  • 按回车键。阿尔弗雷德打开了《崇高》。瞧:崇高又回到了你写剧本之前的样子 因此,总的来说,一旦我启动了一个冻结Sublime的过程,我将执行以下10次按键操作:

    Cmd选项escape回车选项空格键s u回车

    这个过程确实让“强制退出应用程序”窗口悬而未决,因为我还没有找到一种快速的方法来摆脱它,而不在我的系统中添加十次额外的击键。如果它真的让我讨厌,我点击窗口并执行cmd-w,这会关闭窗口

    另一件令人恼火的事情是,升华需要几秒钟才能重新启动,所以通常我都懒得从升华内部运行东西。相反,我转到终端并在那里运行东西,这样我就可以在不影响Sublime的情况下控制我正在测试的脚本


    此外,还有“工具”>“取消生成”选项的快捷键。我从未使用过它,但是使用它和解决它的问题在

    中讨论过,我找到了一个有趣的方法来解决这个问题

    sublime-text2上的我的构建系统调用我的Makefile,它有2个选项,并使用ONESHELL指令:

    .ONESHELL:
    run: myprogram
        ./myprogram &
        echo $$! > "pid.tmp"
    
    注意,在启动我的程序后,它的pid保存在一个文件中。 我还有第二个选择:

    stop:
        kill -9 `cat pid.tmp`
        rm pid.tmp
    
    此选项将终止由
    run
    命令启动的进程

    然后我配置了构建系统(工具->构建系统->新构建系统…),以便可以访问这两个选项:

    {
        "cmd": ["make"],
        "variants":
        [
                {
                        "name": "Run",
                        "cmd": ["make", "run"]
                },
                {
                        "name": "Stop",
                        "cmd": ["make", "stop"]
                }
        ]
    
    }

    但是我想从sublime上的键绑定调用这两个选项,因此我编辑了文件“Preferences->key bindings-User”,如下所示:

    [
    { "keys": ["ctrl+r"], "command": "build", "args": {"variant": "Run"} },
    { "keys": ["alt+r"], "command": "build", "args": {"variant": "Stop"} }
    ]
    
    现在,如果我按ctrl+r,我的程序启动(并进入无限循环),当我按alt+r时,我的程序停止,这几乎就是我想要的

    剩下的唯一问题是,当我运行alt+r时,我失去了由ctrl+r生成的输出

    编辑: 我发现的另一种方法是在Makefile上的新xterm进程上启动我的程序:

    run:
        xterm ./myprogram
    

    我可以用ctrl+c关闭它,它不会停止Supreme的工作。

    这个答案是针对python和windows的。我不确定是否有与mac相同的版本

    运行的python脚本可以从任务管理器终止。使用
    Ctrl+Shift+esc
    打开任务管理器。转到
    processs
    选项卡,只需点击
    del
    即可杀死
    python.exe
    。这只会终止脚本并保持sublime不变。

    我已将VGarcia的解决方案“移植”到Python。但是,如果您的项目仍然需要Makefile,那么您可能应该使用Makefile方法

    评论VGarcia的解决方案:

    • VGarcia的解决方案对我来说效果不错,但我必须编写
      /myprogram&echo$$!>“pid.tmp”
      ,否则存储的pid将结束为空

    • 我想在运行之前构建二进制文件,所以我只添加了一个构建目标
      myprogram
      ,并保留了依赖项
      run:myprogram

    (我知道这应该是一个评论,但我没有足够的声誉。我会在可能的时候发表评论。)

    Python版本

    编写运行程序并存储进程PID的run.py脚本(请参阅):

    编写stop.py脚本以读取PID并终止进程:

    import os, signal
    from subprocess import Popen
    
    # read PID
    with open('pid.tmp', 'r') as f:
        pid = f.readline().rstrip()
    
    # kill process
    os.kill(int(pid), signal.SIGKILL)
    
    # remove temp file
    os.remove('pid.tmp')
    
    配置生成:

    {
        "name": "Python Build",
        // adapt for your project
        "cmd": [my_build_cmd],
        "working_dir": "$project_path",
        "variants":
        [
            {
                "name": "Run",
                "cmd": ["python", "run.py"], 
            },
            {
                 "name": "Stop",
                 "cmd": ["python", "stop.py"],
            }
        ]
    }
    
    或者,您可以将所有函数放在一个模块中,通过解析
    main()
    中的一些参数,调用不同的方法
    run
    stop

    改进建议1(本人未尝试)

    您可能希望为不同的项目重用脚本。在这种情况下:

  • 将脚本更改为带有参数的函数。您可能至少需要
    def运行(bin\u路径)
    。将脚本放在可以从任何项目轻松访问的位置

  • 在sublime项目中,将构建配置放在
    build\u systems
    条目中(该值是一个列表,请参阅,有点旧但可用)。您可以使用
    “cmd”直接调用函数:[
    
    {
        "name": "Python Build",
        // adapt for your project
        "cmd": [my_build_cmd],
        "working_dir": "$project_path",
        "variants":
        [
            {
                "name": "Run",
                "cmd": ["python", "run.py"], 
            },
            {
                 "name": "Stop",
                 "cmd": ["python", "stop.py"],
            }
        ]
    }
    
    import sys, signal
    
    def signal_handler(signal, frame):
        sys.exit(0)
    
    signal.signal(signal.SIGTERM, signal_handler)