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