[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Ожидание нескольких процессов - Пример
В этом примере родительский процесс порождает два процесса, каждый из
которых запускает команду echo(1). Затем родитель ждет завершения
своих потомков, прежде чем продолжить свое исполнение.
Строки 17 и 18 показывают, как использовать wait(2) в этой ситуации.
wait(2) вызывается из цикла while. Он вызывается три раза. Первые два
вызова ожидают завершения процессов-потомков. Последний вызов
возвращает неуспех, так как некого больше ожидать. Заметьте, что код
завершения потомков здесь игнорируется.
Ниже эта программа исполняется два раза. Порядок исполнения трех
процессов непредсказуем.
$ wait2
this is message one
parent: waiting for children
this is message two
parent: all children terminated
$ wait2
this is message two
this is message one
parent: waiting for children
parent: all children terminated
Файл: wait2.c
ОЖИДАНИЕ НЕСКОЛЬКИХ ПРОЦЕССОВ - ПРИМЕР
1 #include <sys/types.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <wait.h>
5 #include <stdio.h>
6
7 main()
8 {
9 if (fork() == 0) /* child */
10 execl("/bin/echo", "echo", "this is",
11 "message one", (char *) 0);
12 if (fork() == 0) /* child */
13 execl("/bin/echo", "echo", "this is",
14 "message two", (char *) 0);
15 printf("parent: waiting for children\n");
16
17 while (wait(0) != -1)
18 ; /* null */
19
20 printf("parent: all children terminated\n");
21 exit(0);
22 }