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

标签 c fork wait eof

我有一个小的 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/

相关文章:

c - 管道, fork ,程序如何在相同条件下运行 if 和 else

c - 如何在 20 秒后终止 c 程序

python - 如何在 Linux 上使用 bash 或 python 生成独立的后台进程

Python - 等待没有高CPU使用率的条件

linux - 我可以在 bash 中为多个并行后台进程使用相同的变量名吗?

c - 将两个不同的动态分配数组传递给 C 中的函数

c - for 循环如何像汇编语言一样在内部进行解析?

c - 将 strlen() 与数组整数或 float 一起使用

java - 在 Integer 上同步时 notify() 出现 IllegalMonitorStateException

c - 测试大端