【发布时间】:2014-03-07 02:00:47
【问题描述】:
从 python 终端,我运行如下命令,生成一个长时间运行的子进程:
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
此命令返回,我可以在 python 终端中执行其他操作,但孩子打印的任何内容仍会打印到我的 python 终端会话中。
当我退出终端(使用exit 或 CTRL+D)时,退出命令会挂起。如果我在此挂起期间按 CTRL+C,则子进程将终止。
如果我手动终止 python 终端进程(通过 posix kill 命令),子进程将变成孤立的,并继续运行,其输出可能被丢弃。
如果我使用python -c 运行此代码,它会等待子进程终止,并且 CTRL+C 会杀死父进程和子进程。
当父母终止时,python 的哪些运行配置会杀死孩子?特别是,如果 python-mod_wsgi-apache 网络服务器产生子进程然后重新启动,这些子进程会被杀死吗?
[顺便说一句,分离从终端产生的子进程的正确方法是什么?有没有比以下更优雅的方法:Deliberately make an orphan process in python]
更新:由在 apache 下运行的 Web 服务器使用multiprocessing.Process 生成的 python 子进程在 apache 重新启动时不会被杀死。
【问题讨论】:
标签: python subprocess multiprocessing children orphan