gpt4 book ai didi

python - python中父进程退出时如何杀死子进程?

转载 作者:行者123 更新时间:2023-11-30 21:49:58 28 4
gpt4 key购买 nike

fork_child.py 中的代码

from subprocess import Popen
child = Popen(["ping", "google.com"], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = child.communicate()

我从终端窗口运行它 -

$python fork_child.py

如果我从另一个终端窗口获取 fork_child.py 的 PID 并使用 SIGTERM 杀死它,“ping”不会被杀死。当 fork_child 收到 SIGTERM 时,如何确保 ping 也被终止?

最佳答案

当父进程被杀死时,子进程不会自动死亡。如果出现以下情况,它们就会死亡:

  • 父进程转发信号并等待子进程终止
  • 当子进程尝试与父进程通信时,例如通过 stdio。仅当父级也创建了子级使用的文件描述符时,这才有效。

signals module contains examples如何编写信号处理程序。

所以你需要:

  • 收集列表中的所有子项
  • 安装信号处理程序
  • 在处理程序中,迭代所有子进程
  • 对于每个子进程,调用 child.terminate(),然后调用 child.wait()

wait() 是允许操作系统对子进程进行垃圾回收所必需的。如果您忘记了它,您可能会遇到僵尸进程。

关于python - python中父进程退出时如何杀死子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025402/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com