[<<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 }