簡體   English   中英

了解UNIX中的fork系統調用

[英]Understanding the fork system call in UNIX

我試圖同時了解之前給我的代碼行的執行順序和使用fork()系統調用進行的流程創建。 它使用C語言在UNIX上運行。

我了解了fork()背后的主要概念,但是我想了解從以下代碼行派生的流程樹的創建:

x = fork() || !fork();

任何幫助將不勝感激!

運行代碼的初始父進程(假設它是PID = 1000 ),執行x = fork()部分,並產生一個新的子進程(假設PID = 1001 )。

對於進程PID = 1000 ,到目前為止,邏輯表達式的值非零,因為fork(2)返回其子項的pid 因此,由於短路評估 ,邏輯表達式的其余部分由於不需要而未評估。

對於流程PID = 1001 ,到目前為止,邏輯表達式的值為0 ,因為在創建新流程的情況下, fork(2)返回0 因此它也必須評估邏輯表達式的其余部分。 它執行!fork()部分,產生一個新進程(假設PID = 1002 )。

派生的過程樹如下:

       1000
        |
        |
       1001
        |
        |
       1002

chrk的答案很好,此外, fork()返回2次,一個是父進程中子進程的pid,另一個是子進程中返回的0。 fork()返回之后,兩個過程都繼續處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM