execute_sleep.py
import os
import time
import subprocess
sleep_script = 'sleep_forever.py'
child = subprocess.Popen(sleep_script,
shell=True,
close_fds=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
subout = child.communicate()[0]
print subout
rc = child.returncode
sleep_forever.py
#!/usr/bin/python
import time
while True:
time.sleep(1)
当我运行execute_sleep.py然后kill -TERM -- -<pid of execute_sleep.py>
时,
execute_sleep.py死了,但sleep_forever.py一直在运行。
我能做什么,以便当execute_sleep.py获得信号时,它会传播到sleep_forever.py?
这些选项中的任何一个都会阻止信号吗?
shell=True
close_fds=True
subprocess.PIPE
答案 0 :(得分:1)
您需要处理信号,否则您正在创建孤儿(sleep_script进程)。因此,当捕获终止父进程的信号时,它会传播到子进程之前。
def handler(signum, frame):
functionToKillSleeper(pidtokill)
signal.signal(signal.SIGTERM, handler)
因此,您需要SIGINT或SIGTERM父进程才能处理信号,否则您的问题仍将存在。