python kill子进程在退出时进行通信

时间:2012-12-04 15:41:49

标签: python subprocess global kill

我有一个大型脚本,旨在运行一个任务,一次一个。但是我有一个init脚本,它使用start-stop-daemon来随时杀死脚本。脚本结束就好了,但是子进程命令运行直到它完成。我怀疑它可能只是我试图做全局变量的问题。或者我使用.communicate与子进程。无论如何,这里是代码中的相关内容:

import subprocess
import os
import signal

pro = ''

def sigHandler( signum, frame ):
    global pro
    os.killpg( pro.pid, signal.SIGTERM )
    sys.exit()

def run(data):
    #I found an example using preexec_fn somewhere on stackoverflow. Cant
    #remember if they were using .communicate() or not
    global pro
    pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid ).communicate()
    return( 1 )

if __name__ == '__main__':
    signal.signal( signal.SIGTERM, sigHandler )
    while True:
        run( relevantData )

1 个答案:

答案 0 :(得分:0)

朋友帮助我搞清楚了。正如我在评论中所说的那样,pro没有随着命令的运行而被填充。所以我不得不将我的代码更改为:

pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid )
pro.communicate()

然后它有效:)