fork() и wait() в цикле c while?

У меня есть эта маленькая программа на C, и я пытаюсь понять, как она работает, это простой цикл, который использует fork() а также wait() чтобы распечатать несколько строк в командной строке, я прокомментировал в меру своих возможностей, что я думаю, что происходит

for (i = 1; i <= 3; i++)            /*simple while loop, loops 3 times */
{
    pid = fork();                   /*returns 0 if a child process is created */
    if(pid == 0){                   /*pid should be a 0 for first loop */
        printf("Hello!\n");         /*we print hello */
        return (i);                 /*will this return i to the parent process that called fork? */ 
    }   else {                      /*fork hasn't returned 0? */
        pid = wait(&j);             /*we wait until j is available? */
        printf("Received %d\n", WEXITSTATUS(j));   /*if available we print "received (j)" */
    }
}

Эта программа должна напечатать:

Hello!
Received 1
Hello!
Received 2
Hello!
Received 3

Когда один из дочерних процессов возвращается i родительский процесс ждет его как &j? Это действительно смущает меня, любая помощь будет принята с благодарностью.

1 ответ

В каждой итерации цикла fork() создает дочерний процесс. Дочерний процесс печатает Hello! и возвращается i в систему. Родительский процесс блокируется на wait() пока ребенок не закончит казнь. j будет содержать значение, которое дочерний процесс вернул в систему.

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