[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Использование fork(2) и exec(2) - Пример

Этот пример представляет программу, которая порождает три процесса,
каждый из которых запускает программу echo(1), используя системный
вызов execl(2). Обратите внимание, что за каждым вызовом execl(2)
следует сообщение об ошибке и завершение процесса.  Сообщение будет
распечатано, только если вызов execl(2) завершится неудачей.
Важно проверять успешность системных вызовов семейства exec(2), иначе
может начаться исполнение  нескольких копий исходной программы. В этом
примере, если  все вызовы exec(2) будут неудачными, может возникнуть
восемь копий исходной программы.
Если все вызовы execl(2) были успешными, после последнего fork(2)
будет существовать четыре процесса. Порядок, в котором они будут
исполняться, невозможно предсказать.
Эта программа демонстрируется так:
$ forkexec1
Parent program ending
this is message three
this is message two
this is message one
Файл: forkexec1.c
               ИСПОЛЬЗОВАНИЕ fork(2) И exec(2) - ПРИМЕР

 1 #include <sys/types.h>
 2 #include <unistd.h>
 3 #include <stdlib.h>
 4 #include <stdio.h>
 5
 6 main()
 7 {
 8
 9     if (fork() == 0) {
10                 execl("/bin/echo", "echo", "this is",
11             "message one", (char *) 0);
12         perror("exec one failed");
13         exit(1);
14     }
15         if (fork() == 0) {
16         execl("/bin/echo", "echo", "this is",
17             "message two", (char *) 0);
18         perror("exec two failed");
19         exit(2);
20     }
21         if (fork() == 0) {
22         execl("/bin/echo", "echo", "this is",
23             "message three", (char *) 0);
24         perror("exec three failed");
25         exit(3);
26     }
27
28     printf("Parent program ending\n");
29 }