0

fork()を使用して、ブロックしない方法でプログラム内でプログラムを実行しようとしています。

pid = fork();

//check for errors
if (pid < 0) {
    exit(1);
}

//the child process runs the gulp
if (pid == 0) {
    if (execv("/home/gulpSniffer/programname", args) < 0) {
        exit(1);
    }
    //child is supposed to block here
}

//father is supposed to continue its run from here

ただし、子のプロセスでプログラムを呼び出すと、プログラム全体がブロックされ、子によってブロックされているため、父親のコードセグメントは実行されません。

誰かがその理由を知っていますか?

ありがとう

4

1 に答える 1

2

wait子プロセスを親で終了しますか?これは、子が実際に終了するまでブロックされます。

または、何らかの方法でブロックする独自のSIGCHLDシグナルハンドラーを持っている可能性がありますか?

子が親ブロックを作成できる他の方法を考えることはできません(プロセス間ロックメカニズムを除いて、これらを使用したかどうかはわかります)。

また、子プロセスがいつ終了するかを気にしない場合は、設定する必要があります

signal(SIGCHLD, SIG_IGN);

そうすれば、システムは自動的に終了した子を刈り取る必要があり、ゾンビになってしまうことはありません。

于 2012-10-28T14:17:12.273 に答える