Sublimetext2 Can';t在sublime text 2中杀死python进程
我搜索了很多地方,但我似乎找不到正确的关键字。我在Sublime中的Python中有一个暂停进程,它导致Mac上的死亡海滩球。我无法访问“工具”>“取消生成”按钮,Control+C无法工作。如何终止此进程?我没有找到一种方法可以在不终止所有Sublime的情况下终止Sublime中的进程。但我确实找到了一种方法,让杀戮和重开崇高变得不那么痛苦。这是我的路Sublimetext2 Can';t在sublime text 2中杀死python进程,sublimetext2,Sublimetext2,我搜索了很多地方,但我似乎找不到正确的关键字。我在Sublime中的Python中有一个暂停进程,它导致Mac上的死亡海滩球。我无法访问“工具”>“取消生成”按钮,Control+C无法工作。如何终止此进程?我没有找到一种方法可以在不终止所有Sublime的情况下终止Sublime中的进程。但我确实找到了一种方法,让杀戮和重开崇高变得不那么痛苦。这是我的路 命令选项escape:这将打开强制退出窗口 强制退出窗口将询问您是否真的要退出升华两次。只需按两次回车键 一个撞车报告窗口将打开。我讨厌这个
此外,还有“工具”>“取消生成”选项的快捷键。我从未使用过它,但是使用它和解决它的问题在中讨论过,我找到了一个有趣的方法来解决这个问题 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的解决方案对我来说效果不错,但我必须编写
,否则存储的pid将结束为空/myprogram&echo$$!>“pid.tmp”
- 我想在运行之前构建二进制文件,所以我只添加了一个构建目标
,并保留了依赖项myprogram
run:myprogram
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路径)
。将脚本放在可以从任何项目轻松访问的位置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)