1

(fork() を使用して) 子を作成し、execvp を使用していくつかのコマンドを実行させる小さなシェルがあります。& オプションもサポートしているため、父親はその間に他のコマンドを実行できます。子が死んだとき、コンソールと子 pid にそれを書きたいので、SIGCHLD のシグハンドラを定義しました。

void backdeadchild(int sig)
{
 int pid, exitstat;
 pid = wait(&exitstat);
 printf("Child with pid: %d died", pid);
}

問題は、ハンドラーがメッセージを出力した後、父親も閉じることです。SIGCHLD が stdin で EOF を返す (そして父が EOF を受け取るたびに閉じる) ことは理解できましたが、なぜ SIGCHLD が EOF を返すのでしょうか? それが普通なら.. 父親が閉じないようにする方法は?

4

1 に答える 1

1

stdout(またはその他のストリーム) が親のstdinに接続されている場合、親が を受け取るのは当然ですEOF

あるいは、親がSIGPIPEそれを処理しない場合、親は (壊れたパイプ) 信号で死ぬ可能性があります。

于 2010-02-24T12:27:34.033 に答える