#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。是否还应该打印栏?

最佳答案

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

关于c - 叉和多处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12992934/

10-17 01:36