簡體   English   中英

fork 有多少進程創建混淆

[英]Fork how many processes created confused

說我有以下程序

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2

所以現在我們有:

  1. Fork #1 創建了一個額外的進程。 所以現在我們有兩個進程。
  2. Fork #2 由兩個進程執行,創建兩個進程,總共四個。

我的困惑是在第一次分叉之后,我們將有兩個進程 P1(父)和 C1(子)。 每個進程將執行第二個 fork 一次。 所以我們不應該有 6 個進程,因為 P1 還會創建兩個進程和 C1 嗎? 還是只有P1可以執行第二個分叉創建P2 C2

一個好的一般規則是一個進程調用fork但兩個進程從它返回(當然,假設它有效)。

fork返回,兩個返回進程都繼續執行,我懷疑您根據您的困惑沒有完全理解這一點。

這意味着您在第一個 fork 中從一個進程變為兩個進程,然后這些進程中的每一個再次調用fork ,因此進程計數加倍然后又加倍(1 - > 4)。 基本上:

1  -> fork#1 -+-> 1 -> fork#2 -+-> 1
              |                |
              |                +-> 3
              |
              +-> 2 -> fork#2 -+-> 2
                               |
                               +-> 4

C1 不會執行兩次 fork,只會執行一次。 P1 將執行它兩次,這將導致 C1 和 C2。 C1 將只執行第二個 fork。 最終結果是 4 個過程。 這是一個可視化:P1 -> C2 第二叉 | 第一個 V fork C1 -> C3 子進程的第二個 fork

暫無
暫無

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

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