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