我通过以下方式在本地开始我的脚本:
sudo python run.py remote
这个脚本碰巧也打开了一个子流程(如果重要的话)
webcam = subprocess.Popen('avconv -f video4linux2 -s 320x240 -r 20 -i /dev/video0 -an -metadata title="OfficeBot" -f flv rtmp://6f7528a4.fme.bambuser.com/b-fme/xxx', shell = True)
我想知道如何在SSH中终止此脚本。
我明白我能做到:
sudo pkill -f "python run.py remote"
或使用:
ps -f -C python
找到进程ID并以此方式终止它。
然而,这些都没有优雅地杀死进程,我希望能够触发CTRL / CMD C的平衡来注册一个退出命令(我在关闭时会做很多事情,当进程被简单地杀死时不会被触发)
谢谢!
答案 0 :(得分:2)
你应该使用"信号"为它:
http://docs.python.org/2/library/signal.html
示例:
import signal, os
def handler(signum, frame):
print 'Signal handler called with signal', signum
signal.signal(signal.SIGINT, handler)
#do your stuff
然后在终端:
kill -INT $PID
或ctrl + c如果您的脚本在当前shell中处于活动状态
http://en.wikipedia.org/wiki/Unix_signal
这也许有用:
答案 1 :(得分:2)
您可以使用signals与流程进行通信。如果你想模拟 CTRL-C ,那么信号就是SIGINT(你可以通过kill -INT
和进程id来提升。你也可以修改SIGTERM
的行为,这将使你的程序在更广泛的情况下干净利落地关闭。