Skip to main content
 首页 » 编程设计

python之为什么这个 fork 不进入后台

2025年05月04日9jyk

我想 fork 到后台运行一个长时间运行的函数,父函数立即退出。我不能使用 os.fork() 因为我需要 Windows 支持。这是我想出的:

#!/usr/bin/env python3 
 
import multiprocessing 
import time 
 
def long_running_function(timeout=30): 
    time.sleep(timeout) 
 
if __name__ == '__main__': 
    multiprocessing.Process(target=long_running_function).start() 

它确实产生了一个子进程:ps 显示了两个具有相同命令字符串的 Python 进程。然而,在我试过的 Mac 和 Windows 机器上,它的行为就好像我在 Process 上调用了 join():父子进程都继续运行,如果我执行 ctrl-c,两者都会死亡。我做错了什么?

请您参考如下方法:

要启动多处理过程可以 fork ,但不是必需的。 Process 使用与 Threading 类似的 API,它不会导致操作系统调用 fork() API。在 Python 中,一个简单的 fork 示例是:

#!/usr/bin/env python 
 
"""A basic fork in action""" 
 
import os 
 
def my_fork(): 
    child_pid = os.fork() 
    if child_pid == 0: 
        print "Child Process: PID# %s" % os.getpid() 
    else: 
        print "Parent Process: PID# %s" % os.getpid() 
 
if __name__ == "__main__": 
    my_fork() 

注意我们是如何导入 os 库的。在您的示例中,您不会导致 fork() 永远不会被调用。

请注意,在 Windows 上,fork() 不存在,因此您不能像在 *nix 系统上那样进行 fork 。

请参阅HERE一篇解释 Python fork 的好文章。