Python:运行一个即使主进程结束后仍然继续的进程/线程

2 投票
1 回答
1309 浏览
提问于 2025-04-18 12:39

我想要运行一个进程或线程,让它能够持续运行,即使主进程已经结束或者被杀掉了。我该怎么做呢?

补充说明:如果这有影响的话,子进程的目的是监控一个外部进程的状态。当那个外部进程完成后,子进程需要启动另一个进程去同样的外部系统。它需要在主程序结束后继续运行,这样用户就可以在其他地方继续工作,同时根据需要向系统发送新的任务。

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 提到的那样。

撰写回答