退出Python进程不要杀掉它(通过ssh)

时间:2013-05-19 22:17:43

标签: python

我通过以下方式在本地开始我的脚本:

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的平衡来注册一个退出命令(我在关闭时会做很多事情,当进程被简单地杀死时不会被触发)

谢谢!

2 个答案:

答案 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

这也许有用:

How do you create a daemon in Python?

答案 1 :(得分:2)

您可以使用signals与流程进行通信。如果你想模拟 CTRL-C ,那么信号就是SIGINT(你可以通过kill -INT和进程id来提升。你也可以修改SIGTERM的行为,这将使你的程序在更广泛的情况下干净利落地关闭。