例如:
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。它在这一点上究竟做了什么?