首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >子进程失效,`()`挂起

子进程失效,`()`挂起
EN

Stack Overflow用户
提问于 2018-06-01 23:09:15
回答 1查看 1.3K关注 0票数 3

在Ubuntu 14.04上的python 2.7中,我启动了一个如下进程:

代码语言:javascript
复制
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后真正退出,如何让父程序在不挂起的情况下可靠地处理它?

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 08:35:39

问题是:不要像这样杀死一个进程:

代码语言:javascript
复制
bag_process.send_signal(signal.SIGINT)

取而代之的是,像这样终止进程及其所有子进程:

代码语言:javascript
复制
parent = psutil.Process(bag_process.pid)
for child in parent.get_children(recursive=True):
    child.send_signal(signal.SIGINT)
bag_process.send_signal(signal.SIGINT)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50646412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档