将Python子进程作为守护进程调用并退出
我正在使用一对Python程序,其中一个程序需要调用另一个程序。
但是,这个调用的方式是,第一个程序要把第二个程序变成一个守护进程(也就是在后台运行),然后自己退出,而不需要等第二个程序结束。
在Python中,这样做可以吗?
我一直在研究os.fork和subprocess模块,但我对如何正确实现这一点感到有些困惑……
2 个回答
17
“守护进程”这个词的意思比“后台进程”要更具体一些。默认情况下,Popen
会启动一个子进程,然后把控制权交还给你的程序,让它继续运行。不过,这并没有说明如何处理信号(比如,当用户在后台进程完成之前退出他们的终端时,会发送一个叫 SIGHUP 的信号)或者如何断开与输入、错误输出、标准输出以及在你调用 Popen
时打开的其他文件描述符的连接。
如果你真的想要一个守护进程,建议使用 python-daemon 模块,这是 PEP 3143 的一个实现。这个模块会处理那些你不想去考虑的复杂部分。
23
你可以使用 subprocess.Popen
来实现这个功能:
import subprocess
cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py']
subprocess.Popen(cmd)
如果你想把 stdout
(标准输出)和 stderr
(错误输出)重定向到其他地方,可以通过在 Popen
的构造函数中传入 stdout=<file_obj>
来做到这一点。