我有一个小shell,它用fork()创建孩子,并让他们用execvp执行一些命令。
它还支持&option,这样父亲可以同时运行其他命令。
当一个孩子死了,我想把它写在控制台和孩子的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?
如果是正常的。。如何避免父亲关门?

最佳答案

如果子流的stdout(或任何其他流)连接到父流的stdin,则父流自然会收到EOF
或者,如果父节点不处理,则父节点可能会死于SIGPIPE(断管)信号。

关于c - 处理SIGCHLD会将EOF返回给父亲,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2325711/

10-11 17:56