我有一个小的 shell,它创建 child (使用 fork())并让他们使用 execvp 执行一些命令。 它还支持 & 选项,因此父亲可以同时运行其他命令。 当一个 child 死去时,我想在控制台和 child 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? 如果正常..如何避免父亲关闭?
最佳答案
如果 child 的stdout
(或任何其他流)连接到 parent 的stdin
,那么 parent 自然会收到EOF
。
或者,如果父级不处理它,则父级可能死于 SIGPIPE
(破管)信号。
关于c - 处理 SIGCHLD 会将 EOF 返回给父亲,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325711/