叉和多处理

时间:2012-10-20 21:37:00

标签: c fork

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
    int p;
    p = fork();
    if (fork()==0) {
        if (execl("/bin/echo", "/bin/echo", "foo", 0) == -1) {
            fork();
        }
        printf("bar\n");
    }
    else {
        if (p!=0) execl("/bin/echo", "/bin/echo", "baz", 0);
        }
}

为什么这个节目打印baz foo foo而不是bar foo baz?在p = fork()我创建了一个子节点。父节点转到else {}并打印baz。然后在行if(fork()== 0)中创建一个孙子。所以孙子进入并打印foo。它还应该打印吧吗?

1 个答案:

答案 0 :(得分:2)

exec*函数用新程序替换进程,因此execl调用之后的代码永远不会运行。

相关问题