首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言父子進程關係詳解:fork() 返回值差異與執行流程分析

     編輯:關於C語言

父子進程基本概念

  • 父進程:呼叫 fork() 建立新進程的原進程
  • 子進程:被 fork() 建立的新進程,獲得父進程資源副本 (程式碼、資料、檔案描述符等)
  • 無母進程概念:程式世界為父系社會 😄

fork() 返回值差異:控制流分歧關鍵

進程fork() 返回值執行分支
父進程子進程 PID (>0)if (pid > 0)
子進程0else if (pid == 0)
失敗-1else

程式碼與執行流程示範

pid_t pid = fork();
sleep(5);  // 方便觀察 ps 輸出

if (pid > 0)
    printf("PID: %d -> Father Process\n", getpid());
else if (pid == 0)
    printf("PID: %d -> Son Process\n", getpid());
else
    printf("Create failed\n");

系統驗證:ps 指令觀察雙進程

$ ps x
PID TTY STAT TIME COMMAND
3212 pts/3 S+  0:00 ./s   # 父進程
3213 pts/3 S+  0:00 ./s   # 子進程 (相同程式碼,不同 PID)

為什麼同一段程式碼輸出不同?

因為 fork() 在父子進程中返回不同值,導致進入不同 if/else 分支。父進程獲得子進程 PID,子進程獲得 0。這是 fork() 設計的核心精華:「一次呼叫,兩次返回」。

  • 子進程複製父進程的虛擬記憶體空間 (Copy-on-Write 優化)
  • 檔案描述符表共享 (指向同一檔案表項)
  • 信號處理、環境變數、工作目錄等均被繼承
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved