2013-05-19 45 views
1

我在本地開始我的腳本通過:退出Python的過程中不要殺死它(通過ssh)

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的Equileivent來註冊一個退出命令(我在關機時做了很多事情,當進程被簡單地終止時)。

謝謝!

回答

1

您應該使用 「信號」 吧:

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,如果你的腳本在當前外殼中激活

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

這也可能是有用的:

How do you create a daemon in Python?

+0

這個偉大的工程爲主體的過程,但是我的子進程繼續輸出: 高清KILLME(正負號,車架): webcam.kill() sys.exit() – Titan

+0

更新:使用http固定://計算器。 COM/A /241465分之4791612 – Titan

2

可以使用signals與您的進程通信。如果你想模仿CTRL-C的信號是SIGINT(您可以通過kill -INT和進程id提高,還可以修改行爲SIGTERM這將使乾淨下更廣泛的情況下,你的程序關閉。