學習pid程序以及fork

2022-07-11 01:36:11 字數 1269 閱讀 4542

學習linux期間,看到乙個語句  pid_t pid = fork();

想要理解pid_t 與 fork() 的意義為何。

pid_t是乙個資料型別,定義的型別是程序號id,fork()函式則返回乙個id號

pid_t需要標頭檔案 支援

分析一波

執行結果如下圖

執行發現,在執行了上面7次後,又執行了兩次

從執行結果開始分析fork()

1)父程序初始化

2)父程序呼叫了fork(),fork為系統呼叫,進入核心

3)核心根據父程序複製乙個子程序,父子兩個程序資訊一樣,**和資料也相同,所以都會執行接下來的語句,如圖

4)兩個程序都進入核心然後等待從核心中返回,但是究竟是父程序先返回還是子程序先返回呢,就取決於核心的排程演算法了

5)當父程序被排程時,pid變數被fork()賦予的值是子程序的id,是大於0的,所以就呼叫第二個message賦值,並執行3次for迴圈

6)如果某時刻子程序被呼叫了,就會從核心中被返回,返回的值是0,就會執行第乙個message賦值,並執行6次for迴圈。(在這個過程中,兩個程序對於message與n變數的賦值是互不影響的)

7)父程序列印一次睡眠1秒,在這1秒中子程序很可能被排程,子程序列印一次也休眠1秒,又有可能排程父程序,所以基本上是父子程序輪流排程列印。如果將sleep去掉,結果是:

就會發現是父程序執行結束後子程序才有被排程的空間

8)這個程式是在shell下執行的,shell也是乙個程序,而且是父程序的父程序,在父程序結束之後,shell會認為程序結束了,然後列印shell提示符,然而此時子程序還在執行,所以才會在shell提示符後輸出資訊

總結:fork()函式的特點是「呼叫一次,返回兩次」,父程序中呼叫一次,父子程序中返回兩次,本來是乙個控制流程的程式,在呼叫fork()函式之後會裂開變為兩個控制流程,'fork'為「派生、分支」,父程序的fork返回的是子程序的id,子程序中的fork返回的是0

12/12/20 dj

程序學習4 fork建立程序

為什麼要建立子程序 1 每一次程式的執行都需要乙個程序 2 多程序實現巨集觀上的並行 fork的內部原理 1 程序的 生長模式。如果作業系統需要乙個新程序來執行乙個程式,那麼作業系統會用乙個現有的程序來複製生成乙個新程序。老程序叫父程序,複製生成的新程序叫子程序。2 fork的演示 3 fork函式...

程序標識(pid)

每個linux下的程序都會分配唯一乙個程序標識 pid pid是個16位元的整數。pid就是process id type 的縮寫,c程式用到程序標識時,通常會用pid t來宣告程序標識變數,通過getpid 來獲得程序pid。通過getppid來獲得父程序的pid。讓我們來看一下pid的定義 開啟...

linux 程序學習體會 fork

用程式驗證紅色字型 理論 建立子程序 pid t fork void 被呼叫一次,卻返回兩次,它可能有三種不同的返回值 在父程序中,fork返回新建立的子程序的pid 在子程序中,fork返回0 如果出錯,fork返回乙個負值 用fork建立子程序時,子程序和父程序fork後面的 是共享的,但子程序...