簡體   English   中英

下面的C程序會創建多少個進程?

[英]How many processes will be created by the C program below?

你能在回答的同時給出解釋嗎? 我在識別這些系統調用創建的正確進程數時遇到了一些問題。

我認為將創建 8 個進程。

#include <stdio.h>

main()
{
    printf("Here comes the date. \n");    
    printf("Here it is. \n");

    fork();    
    fork();    
    fork();

    execl("/bin/date", "date", 0); //Line A

    printf("That was the date. \n"); //Line B    
    printf("Program will exit now. \n"); //Line C    
}

顯示的代碼創建了七個進程。 當代碼啟動時,已經有一個進程在執行程序。 然后fork再創建一個,所以有兩個。

然后這兩個進程執行fork ,每個進程再創建一個進程,所以有四個。

然后這四個進程執行fork ,每個進程再創建一個進程,所以有八個。

因此創建了七個新進程。

execl不會創建新進程; 它只是改變進程正在執行的程序。

Parent 創建三個孩子,每個fork()一個,但第一個孩子只執行兩次fork()調用(它在第一個 fork 之后開始),第二個創建一個新的孩子(最后一個 fork),最后一個不創建(在最后一個叉子)從第一個孩子,另外兩個(第一個創建另一個孩子,第二個沒有)所以我們總共有三個進程,兩個,一個和一個,添加到創建的 7 個子進程,加上第一個,總共八個. 您將看到前兩行 output(因為尚未發出fork() ),然后八次 date 命令對每個父母、子孫執行一次,最后兩行不是 output,因為總是有一個execv(2)永不返回的調用(僅在調用date命令失敗時返回)

parent
 |
 + fork() -> cld1
 |            |
 |            + fork() -> cld11
 |            |            |
 |            |            + fork() -> cld111
 |            |            |           |
 |            |            |           +execv(date)
 |            |            |
 |            |            + execv(date)
 |            |   
 |            + fork() -> cld12
 |            |            |
 |            |            + execv(date)
 |            |
 |            + execv(date)
 |
 + fork() -> cld2
 |            |
 |            + fork() -> cld21
 |            |            |
 |            |            + execv(date)
 |            |
 |            + execv(date)
 |
 + fork() -> cld3
 |            |
 |            + execv(date)
 |
 + execv(date)

暫無
暫無

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

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