하위 프로세스 3 개와 상위 프로세스 1 개가 있습니까? 두 개의 다른 waitpid는 무엇을합니까? 왜 그 중 두 개가 있습니까?waitpid와 함께 포크 사용
int main()
{
pid_t pid;
int status, counter = 4;
while(counter > 0)
{
pid = fork();
if(pid)
{
counter /= 2;
}
else
{
printf("%d", counter); /* (1) */
break;
}
}
if(pid)
{
waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);
waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);
printf(";%d", counter); /* (2) */
}
return counter;
}
waitpid가 3, 5, 6, 34, 52, 61 (세미콜론 제외)을 인쇄 한 후 두 번째 printf입니다. 2 자리 숫자 인쇄 방법이 확실치 않습니다. 나는 두 번째 숫자가 아마도 while 루프에서 printf에서 오는 것임을 압니다.
while 루프에서 'printf'앞에 접두어를 붙이면 어디서 시작되는지 알 수 있습니다. – Barmar
일부 어린이도 포크를합니다. – egur
@ guur 어떻게 그렇게? 'fork()'는 포크 다음에'counter> 0'을 요구하는 코드에서만 호출됩니다. 자식 ('pid == 0')은'fork()'를 수행하는 루프에서 빠져 나옵니다. – mah