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
будет содержать значение, которое дочерний процесс вернул в систему.