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函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回。

posted @ 2020-05-14 16:15  961897  阅读(2937)  评论(2编辑  收藏  举报