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函數會返回兩次,一次是在父進程中返回,另一次是在子進程中返回。