(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 を返すのでしょうか? それが普通なら.. 父親が閉じないようにする方法は?