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);
        }
}

このプログラムがbarfoobazではなくbazfoofooを出力するのはなぜですか?p = fork()で、私が作成した子。親はelse {}に移動し、bazを出力します。次に、行if(fork()== 0)に孫が作成されます。それで孫が入ってfooを印刷します。バーも印刷する必要がありますか?

4

1 に答える 1

2

これらのexec*関数はプロセスを新しいプログラムに置き換えるexeclため、呼び出し後のコードは実行されません。

于 2012-10-20T21:40:04.823 に答える