将Python子进程作为守护进程调用并退出

20 投票
2 回答
29651 浏览
提问于 2025-04-17 10:43

我正在使用一对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> 来做到这一点。

撰写回答