1

我正在通过以下方式在本地启动我的脚本:

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

谢谢!

4

2 回答 2

3

您应该为此使用“信号”:

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

如果您的脚本在当前 shell 中处于活动状态,则为 ctrl+c

http://en.wikipedia.org/wiki/Unix_signal

这也可能有用:

如何在 Python 中创建守护进程?

于 2013-05-19T22:24:56.400 回答
2

您可以使用信号与您的流程进行通信。如果你想模拟CTRL-C信号是 SIGINT (你可以通过kill -INT和处理 id 来提高它。你还可以修改SIGTERM使你的程序在更广泛的情况下干净地关闭的行为。

于 2013-05-19T22:29:19.777 回答