从 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 Web 服务器生成子进程,然后重新启动,子进程是否会被终止?
[ 顺便提一句,有没有比以下方法更优雅的方式从终端分离生成的子进程?Deliberately make an orphan process in python ]
更新:在由 Apache 运行的 Web 服务器下使用 multiprocessing.Process
生成的 Python 子进程在 Apache 重新启动时不会被终止。
subprocess.Popen
启动这样的进程是完全标准的。python-daemon
很好;它具有繁琐的API,但经过了实战考验,后者的质量很重要,因为很容易出错。 - Alp