将SIGINT信号委托给子进程,然后清除并终止父进程

时间:2015-09-09 19:27:03

标签: python linux subprocess signals sigint

我有一个主python(testmain.py)脚本,它使用subprocess.Popen命令执行另一个python脚本(test.py)。当我按Ctrl-C时,我希望孩子退出退出代码2,然后父亲显示退出代码,然后终止。

我在父脚本和子脚本中都有信号处理程序。

testmain.py

def signal_handler(signal, frame):
    print "outer signal handler"
    exit(2)
signal.signal(signal.SIGINT, signal_handler) 

def execute()
proc=subprocess.Popen("python test.py",shell=True)
    streamdata=proc.communicate()[0]
    rc=proc.returncode
    print "return code:",rc

execute()

test.py

def signal_handler(signal, frame):
    print "exiting: inner function"
    exit(2)
signal.signal(signal.SIGINT, signal_handler)

我检查Delegate signal handling to a child process in python这与我的问题类似,但在这种情况下,父母继续执行,我不想要。

我想:1.exit test.py with exit(2)2.print退出代码在testmain.py 3.exit test.py中退出(2)

有人可以提供建议吗? 谢谢。

更新:仅处理子(test.py)中的信号并检查父(testmain.py)中的返回代码将执行我想要的操作。

if rc==2:
   print "child was terminated"
   exit(2)

但我想知道是否有一种干净的方法可以使用信号处理。

0 个答案:

没有答案