我想創造這個使用fork()和wait()的混淆,這也是最有效的方法嗎?
P0
/\
P1 P2
/| \
P3 P4 P5
使用fork()
這是我的代碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wait.h>
int main()
{
printf("P0 PID=%d, PPID=%d.\n", getpid(), getppid());
int pid1, pid2, pid3, pid4, pid5;
pid1 = fork();
int status = 0;
if(pid1 != 0){
pid2 = fork();
if(pid2 != 0){
waitpid(pid2, &status, 0); //If father, wait for child P2
printf("%d\n", status);
}
else{
printf("P2 PID=%d, PPID=%d.\n", getpid(), getppid());
pid3 = fork();
if(pid3 != 0){ //If father (P2 at this point)
waitpid(pid3, &status, 0); //Wait for child (P3)
pid4 = fork();
if(pid4 != 0){
waitpid(pid4, &status, 0);
pid5 = fork();
if(pid5 == 0){
printf("P5 PID=%d, PPID=%d.\n", getpid(), getppid());
}
}
else{
printf("P4 PID=%d, PPID=%d.\n", getpid(), getppid());
}
}
else{
printf("P3 PID=%d, PPID=%d.\n", getpid(), getppid());
}
}
}
else{
printf("P1 PID=%d, PPID=%d.\n", getpid(), getppid());
}
return 0;
}
我的目標是使第一個過程等待,直到我P2
過程中確實需要的一切,然後繼續。 此行printf("%d\n", status);
用於查看P0
(父級)進程何時繼續,但每次都打印在不同的位置。我很困擾。我做對了嗎? 此外,這是創建上述內容的最有效方法嗎? 謝謝
UPDATE
我改變了一些東西在我的代碼(見註釋),我現在使用waitpid
。我認爲這是正確的。我等待P2結束,P2等待P3,P4結束。 This is the output
謝謝你的時間和你的答案。我會嘗試。作爲@ Dinos_12345建議使用'waitpid',是否有更好的解決方案? –
'waitpid'給你更多的控制,你可以指定一個特定的進程等待等。在手冊頁中,您可以看到'wait'等同於'waitpid(-1,&status,0)'。使用哪個可能取決於你使用的是什麼。 – GoodDeeds