例如:
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]
一个子进程有pid == 0
. 有一个子进程pid1
和一个子进程,pid2
所以会有:
[3]
来了execl
。它在这一点上究竟做了什么?