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

C語言進程控制實戰(七十九):父進程與子進程關係深度解析

     編輯:關於C

各位看官好,上回講了fork()創建進程,今天深入剖析父進程與子進程的關係。

什麼是父子進程?

進程A運行中創建進程B → A是父進程,B是子進程。程序世界屬「父系社會」,無「母進程」之說(笑)。

代碼驗證父子進程執行邏輯

#include 
#include 

int main() {
    pid_t pid = fork();
    sleep(5);
    if (pid > 0) {
        printf("PID: %d -> Father Process is running\n", getpid());
    } else if (pid == 0) {
        printf("PID: %d -> Son Process is running\n", getpid());
    } else {
        printf("Create process failed\n");
        return 1;
    }
    return 0;
}

運行結果

$ ./s
PID: 3212 -> Father Process is running
PID: 3213 -> Son Process is running

為什麼父子進程輸出不同?

雖然父子進程共享代碼段、數據段,執行相同的main函數,但fork()在父子進程中返回值不同:

  • 父進程中fork()返回子進程PID(>0) → 執行if(pid>0)分支
  • 子進程中fork()返回0 → 執行else if(pid==0)分支

這就是同一代碼、不同輸出的核心原因!

系統驗證

ps x確認確有兩個./s進程運行(PID 3212、3213),程序邏輯完全正確。

核心知識點

  1. fork()一次調用、兩次返回
  2. 父子進程獨立擁有變量副本(寫時複製COW機制)
  3. 返回值差異是區分父子進程執行邏輯的關鍵

完整代碼在資源區。下回我們將講解進程互斥,敬請期待!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved