- os.fork()函数官方文档解释。
fork是分叉的意思。根据官方文档我的理解是从主进程执行到fork函数部分开始分叉执行。(fork函数创建了一个子进程与主进程一起在cpu内执行。) - os.fork()函数代码。
import os
if __name__ == '__main__':
print("This is fork process")
pid = os.fork()
if pid == 0:
print("This is child process{}".format(os.getpid())) # os.getpid 获取当前进程号
else:
print("This is parent process {},create a child process {}".format(os.getpid(), pid))
在os.fork()函数处主进程的返回值为子进程的进程号(pid)。子进程返回的进程号(pid)为0。
- os.fork()函数个人理解。
这里需要注意的的是子进程是在fork函数位置开始复制主进程。因此在fork之前只有主进程一个进程。
这里参考知乎大佬的fork原理与实现,虽然讲的是c的但是感觉跟python的原理是一样的。
fork的实现分为以下两步
- 复制进程资源
- 执行该进程
复制进程的资源包括以下几步
- 进程pcb
- 程序体,即代码段数据段等
- 用户栈
- 内核栈
- 虚拟内存池
- 页表