Я записал следующую программу и выполнился в терминале. Но я смущен, что программа не отображает результаты, как ожидают, поведение описано в Интернете. Я скопировал этот код с книги.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
pid_t childid;
if(argc!=2)
{
printf("Please an argument at terminal\n");
return 0;
}
int i,n = atoi(argv[1]);
for(i=0;i<n;i++)
{
childid=fork();
if(childid==0)
{
//sleep(20);
break;
}
}
while(wait(NULL)>0);
printf("i= %d\n Process ID %d\n Parent ID %d\n Child ID %d\n",i,getpid(),getppid(),childid);
return 0;
}
Should't родительский процесс выполняет последний "printf" statment n время, где n является числом детей, создал.. Что происходит, когда родитель звонит в то время как (ожидают (ПУСТОЙ УКАЗАТЕЛЬ)> 0); и ребенок находится все еще в excution?
Спасибо
Системный вызов wait()
приостанавливает выполнение вызывающего процесса до тех пор, пока один из его дочерних элементов не завершится.
wait () возвращает pid ребенка, состояние которого изменено (или, скажем, прекращено). Возвращает -1 по ошибке (когда нет дочернего элемента, которого можно ждать).
Таким образом, цикл while будет выполняться 0 раз в дочернем (разветвленном) процессе. И в родительском процессе он будет выполнен n (без дочернего процесса) раз.
Эта программа напечатает последнее сообщение n + 1 раз. (1 в основном и n в детях)