например:
int pid1 = fork();
printf("%s\n", "[1]");
int pid2 = fork();
printf("%s\n", "[2]");
if ((pid1 == 0) && (pid2 == 0)) {
printf("%s\n", "[3]");
execl("/bin/emacs", "/etc/fstab");
int pid3 = fork();
printf("%s\n", "[4]");
} else {
printf("%s\n", "[5]");
}
Что на самом деле делает строка?
Семейство функций execl
заменяет текущий образ процесса новым образом процесса.
Итак, эта программа запускается, просто запустим программу:
Он разделит процессы на 2 с первым ответвлением:
[1]
[1]
После этого он снова разветвляется, поэтому у вас есть 4 процесса и отпечаток:
[2]
[2]
[2]
[2]
Aдочерний процесс имеет pid == 0
.Есть один дочерний процесс с pid1
и один с pid2
, так что будет точно:
[3]
И вот идет execl
.Что именно он делает в этот момент?