Существуют ли 3 дочерних процесса и один родительский процесс? Что делают два разных 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;
}
второй Printf после waitpid отпечатков 3, 5, 6, 34, 52, 61 (за исключением точки с запятой). Я не уверен, как печатаются две цифры. Я знаю, что вторая цифра, вероятно, поступает из printf в цикле while.
Поместите префикс перед 'printf' в цикле while, чтобы вы могли узнать, где он начинается. – Barmar
Обратите внимание, что некоторые дети также будут вилкой. – egur
@egur как так? 'fork()' вызывается только в куске кода, который требует 'counter> 0' после fork, дочерний элемент (с' pid == 0') выходит из цикла, который выполняет 'fork()'. – mah