Python:运行一个即使主进程结束后仍然继续的进程/线程
我想要运行一个进程或线程,让它能够持续运行,即使主进程已经结束或者被杀掉了。我该怎么做呢?
补充说明:如果这有影响的话,子进程的目的是监控一个外部进程的状态。当那个外部进程完成后,子进程需要启动另一个进程去同样的外部系统。它需要在主程序结束后继续运行,这样用户就可以在其他地方继续工作,同时根据需要向系统发送新的任务。
1 个回答
5
如果你只是想在一个子进程中继续执行代码,并且想要退出当前的进程,你可以直接使用 os.fork
。
import os
import time
print('Before forking.')
if not os.fork():
for i in range(5):
print("Forkety fork, I'm forked!")
time.sleep(1)
调用 os.fork()
基本上就是复制你的进程。对于父进程来说,os.fork()
会返回子进程的进程ID(PID),而对于子进程来说,它会返回 0
。
当你写 if not os.fork()
时,父进程不会进入 if
这个分支,因为调用 os.fork()
的结果是一个非零值(也就是子进程的PID)。
在子进程中,os.fork()
返回了零,因此子进程会进入 if
这个分支。
如果你想运行任何可执行文件(不一定是Python代码),你最好的选择是 subprocess.Popen
,正如 @khachik 提到的那样。