[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Ожидание нескольких процессов - Пример (Улучшенный)

В этом примере, как и в предыдущем, родитель также ждет завершения
нескольких потомков. Кроме того, родитель предпринимает специальные
действия для каждого из потомков и распечатывает код завершения
каждого из них.
12-13     Первый подпроцесс исполняет команду date(1).
14-15     Второй подпроцесс исполняет date(1) с неправильной опцией.
17-24     Цикл while ожидает завершения обоих подпроцессов. Заметьте,
как идентификатор завершившегося подпроцесса присваивается переменной
pid. Внутри цикла выбирается оператор печати, соответствующий этому
идентификатору. Заметьте также, что эта программа не зависит от
порядка завершения подпроцессов.
Этот пример демонстрируется следующим образом:
$ wait3
Sun Oct  6 10:25:39 EDT 1990
parent: waiting for children
date: bad conversion
parent: first child: 0
parent: second child: 1
parent: all children terminated
Файл: wait3.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     pid_t child1, child2, pid;
10         int status;
11
12     if ((child1 = fork()) == 0)
13                 execl("/bin/date", "date", (char *) 0);
14     if ((child2 = fork()) == 0)
15                 execl("/bin/date", "date", "-x", (char *) 0);
16     printf("parent: waiting for children\n");
17         while ((pid = wait(&status)) != -1) {
18         if (child1 == pid)
19             printf("parent: first child: %d\n",
20                 WEXITSTATUS(status));
21         else if (child2 == pid)
22             printf("parent: second child: %d\n",
23                 WEXITSTATUS(status));
24     }
25         printf("parent: all children terminated\n");
26
27     exit(0);
28 }