我有一个小外壳,它可以创建孩子(使用 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?如果是正常的..如何避免父亲关闭?