1
내가 만들려고하고이fork()와 wait()를 사용하는 혼란이 또한 가장 효율적인 방법입니까?
P0
/\
P1 P2
/| \
P3 P4 P5
fork()
사용이 내 내 P2
프로세스가 필요한 모든 작업을 수행 할 때까지
#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;
}
내 목표는 최초 공정 대기를 만드는 것입니다 코드 및입니다 계속 진행하십시오. 이 줄은 P0
(부모) 프로세스가 계속 될 때 표시되지만 매번 다른 위치에 인쇄됩니다. 나 엄청 혼란스러워. 이 일을 제대로하고 있습니까? 또한 위에서 설명한 내용을 만드는 데 가장 효율적인 방법입니까? 은 (주석을 참조)
UPDATE 내 코드에서 몇 가지 변경 감사 지금 waitpid
를 사용합니다. 나는 이것이 정확하다고 생각한다. 나는 P2가 끝나기를 기다리고 P2는 P3, P4가 끝날 때까지 기다린다. wait
의 man page에서 This is the output