簡體   English   中英

為什么我的控制台看起來像是在使用 fork() 創建 3 個孩子之后執行了一個命令?

[英]why does my console look like it performed a command after using fork() to create 3 children?

好的,所以要么我有這個奇怪的錯誤,要么這只是我的錯誤,我不需要擔心。 無論如何,我正在做一個任務,我需要分叉 3 次,我在這里有一些快速的虛擬代碼:

for(int x = 0; x < 3; x++) {
    procID = fork();
    if (procID == 0) {
        sleep(3);
        printf("child process: \n");
        exit(0);
    }

}

這是我想要/需要的 output:

y@y:~/Desktop/playground$ ./a
child process
child process
child process
y@y:~/Desktop/playground$

但這是我得到的 output:

y@y:~/Desktop/playground$ gcc a.c -o a -lm
y@y:~/Desktop/playground$ ./a
y@y:~/Desktop/playground$ child process
child process
child process

包含問題的行是這個: y@y:~/Desktop/playground$ child process

為什么它會自動使它看起來好像我在控制台中輸入了命令 y@y:~/Desktop/playground$ 子進程。 我正在研究它並試圖自己解決這個問題,但顯然我不能自己做到這一點。 我知道一旦最后一個父母退出,那么“y@y:~/Desktop/playground$”就會被放入控制台,我能做些什么來強制父母等到孩子們完成執行嗎? 還是這里有其他東西在起作用?

為什么它會自動讓它看起來好像我輸入了命令 [..]

它沒有。 你看到的是你的 shell 提示。

原因是您沒有從父進程調用wait(2)以退出所有子進程。 因此,當父母在一個或多個孩子之前退出時,您會觀察到這種行為。

我能做些什么來強迫父母等到孩子們完成執行嗎?

呼叫wait(NULL); 在 for 循環之后的循環中,以便父級等待所有子級:

while (wait(NULL) > 0);

所以確實 wait(NULL) 是我需要做的。 如果你遇到同樣的問題,你需要等待(NULL); 與您擁有相同數量的孩子。

暫無
暫無

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

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