1

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

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

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

4

1 回答 1

1

如果子stdout流(或任何其他流)连接到父流stdin,则父流自然会收到EOF.

SIGPIPE或者,如果父母不处理它,父母可能会死于(断管)信号。

于 2010-02-24T12:27:34.033 回答