ожидайте () странное поведение в Ubuntu

Я записал следующую программу и выполнился в терминале. Но я смущен, что программа не отображает результаты, как ожидают, поведение описано в Интернете. Я скопировал этот код с книги.

#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?

Спасибо

3
задан 23 September 2012 в 15:54

1 ответ

Системный вызов wait() приостанавливает выполнение вызывающего процесса до тех пор, пока один из его дочерних элементов не завершится.

wait () возвращает pid ребенка, состояние которого изменено (или, скажем, прекращено). Возвращает -1 по ошибке (когда нет дочернего элемента, которого можно ждать).

Таким образом, цикл while будет выполняться 0 раз в дочернем (разветвленном) процессе. И в родительском процессе он будет выполнен n (без дочернего процесса) раз.

Эта программа напечатает последнее сообщение n + 1 раз. (1 в основном и n в детях)

0
ответ дан 23 September 2012 в 15:54

Другие вопросы по тегам:

Похожие вопросы: