0
#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。它也应该打印吧?

4

1 回答 1

2

这些exec*函数用新程序替换了进程,所以execl调用之后的代码永远不会运行。

于 2012-10-20T21:40:04.823 回答