📜  Python| os.fork() 方法(1)

📅  最后修改于: 2023-12-03 14:46:21.930000             🧑  作者: Mango

Python | os.fork() 方法

在 Unix 操作系统中,fork() 方法可以创建一个新的子进程,该子进程是原进程的副本。两个进程拥有相同的代码,共享打开的文件描述符、进程间通信资源等等。子进程和父进程之间是相互独立的,子进程的变化不会影响父进程,反之亦然。

语法

以下是 fork() 方法的语法:

os.fork()
返回值

子进程返回 0,父进程返回子进程的 PID(进程 ID)。如果创建子进程失败,返回 -1。

注意事项
  • fork() 方法只能在 Unix/Linux 等 Unix 操作系统中使用,Windows 不支持。
  • 子进程会继承父进程的全部资源,例如打开的文件描述符、信号处理函数等等。为了避免资源泄露和竞争问题,应该在子进程中立即关闭不需要的文件描述符,并重新设置其余的资源。
  • 父进程和子进程的内存是相互独立的,它们之间不能共享变量和对象。
示例

以下示例展示了如何使用 fork() 方法创建新的子进程:

import os

def child_process():
    print('子进程: 我的 PID 是', os.getpid())
    print('子进程: 我的父进程 PID 是', os.getppid())

def parent_process():
    print('父进程: 我的 PID 是', os.getpid())
    child_pid = os.fork()
    if child_pid == 0:
        print('父进程: 我刚刚创建了一个子进程,PID 是', os.getpid())
        child_process()
    else:
        print('父进程: 我的子进程 PID 是', child_pid)

parent_process()

输出:

父进程: 我的 PID 是 1234
父进程: 我刚刚创建了一个子进程,PID 是 1235
子进程: 我的 PID 是 1235
子进程: 我的父进程 PID 是 1234
父进程: 我的子进程 PID 是 1235

在上例中,父进程创建了一个子进程,并在子进程中输出其 PID 和父进程 PID。注意,子进程的执行顺序和输出顺序不能保证,因为在父子进程之间并没有同步机制。如果需要保证顺序,可以使用进程间通信方式如管道、共享内存等等。