在 Ubuntu 14.04 上的 python 2.7 中,我启动了一个这样的过程:
bag_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for i in range(5):
print "Countdown: {}".format(5 - i - 1)
time.sleep(1)
print "Sending SIGINT to PID {}".format(bag_process.pid)
bag_process.send_signal(signal.SIGINT)
(bag_out, bag_err) = bag_process.communicate()
程序挂在了communicate()
线上。当我打开另一个终端时,我运行ps -ef | grep ###
查找子进程的 pid,我看到它是<defunct>
.
为什么子程序失效,而父程序挂起communicate()
?如果孩子收到后真正退出SIGINT
,我怎样才能让父程序可靠地处理它而不挂起?