Linux fork()返回值
linux fork()返回值
fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。
特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程中返回0。fork失败返回负数,发生在PID个数达上限或内存不足时。
# Python示例
import os
print("当前进程PID为:", os.getppid())
# 此时仅有一个进程
pid = os.fork()
# 此时已经有两个进程在同时运行
if pid < 0:
print("fork失败")
elif pid:
print(f"我是父进程,我的PID是:{os.getppid()},fork给我返回的子进程PID是:{pid}")
else:
print(f"我是子进程,我的PID是:{os.getpid()},fork给我返回的PID是:{pid}")
# 当前进程PID为: 20925
# 我是父进程,我的PID是:20925,fork给我返回的子进程PID是:6707
# 我是子进程,我的PID是:6707,fork给我返回的PID是:0
为什么fork会返回两次?
由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回。