[英]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.