簡體   English   中英

在此代碼中創建了多少個進程?

[英]How many processes are created in this code?

我的教科書中有這個問題,我無法解決這個問題。 問題是:下面的程序代碼中同時運行的最大進程數是多少?

在下面的代碼中沒有對fork()進行返回值檢查,因此父和子都將執行所有代碼,對吧? 假設在第一個fork()調用中父進程先等待然后退出,我錯了嗎? 那么一次運行的最大進程數是2? (就在父母退出之前,它做了一個分叉)。

int main()
{
    if ( fork() )
        wait(0);
    else
        exit(0);

    if ( fork() )
        wait(0);
    else
    {
        if ( fork() )
            wait(0);
        else
        {
            if ( fork() )
                wait(0);
            else
                exit(0);
        }
    }
    return 0;
}

我認為代碼編寫得非常糟糕,並且很難清楚代碼中實際發生了什么。 我非常感謝有用的答案。

提前致謝。

在下面的代碼中沒有對fork()進行返回值檢查,因此父和子都將執行所有代碼,對吧?

否。如果成功, fork()將在父進程中返回正數,在子進程中返回0。 那些if (fork())在父進程中將為true。

假設在第一個fork()調用中父進程先等待然后退出,我錯了嗎?

否。在wait()返回后,該父級將繼續在下一個if (fork()) ,子級將退出。

那么一次運行的最大進程數是2?

不是。正確答案是4。

fork(2)手冊頁

成功時,子進程的PID在父進程中返回,並在子進程中返回0。 失敗時,在父項中返回-1,不創建子進程,並正確設置errno。

所以這些條件就像這樣(假設fork成功):

if ( fork() )
{
  // parent, fork() returned the (nonzero) PID of the child process
}
else
  // child, fork() returned 0
}

暫無
暫無

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

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