处理SIGCHLD会将EOF返回给父亲,为什么?

时间:2010-02-24 11:55:28

标签: c fork wait eof

我有一个创建子项的小shell(使用fork())并使用execvp执行一些命令。 它也支持&选项,所以父亲可以同时运行其他命令。 当一个孩子死了我想在控制台和孩子的pid上写,所以我为SIGCHLD定义了一个sighandler:

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

问题是在处理程序打印消息后父亲也关闭了。 我已经设法理解SIGCHLD在stdin中返回一个EOF(每当父亲收到它关闭的EOF时),但为什么SIGCHLD返回EOF? 如果这是正常的......如何避免父亲关闭?

1 个答案:

答案 0 :(得分:1)

如果孩子的stdout(或任何其他信息流)与父母的stdin相关联,则父母自然会收到EOF

如果父母没有处理它,父母可能会死于SIGPIPE(破管)信号。