У меня есть небольшая оболочка, которая создает дочерние элементы (с помощью fork ()) и заставляет их выполнять некоторые команды с помощью execvp.
Он также поддерживает опцию &, чтобы отец мог одновременно выполнять другие команды.
Когда ребенок умирает, я хочу написать это на консоли, а также дочерний pid, поэтому я определил sighandler для SIGCHLD:
void backdeadchild(int sig)
{
int pid, exitstat;
pid = wait(&exitstat);
printf("Child with pid: %d died", pid);
}
Проблема в том, что после того, как обработчик напечатает сообщение, отец закрывается.
Мне удалось понять, что SIGCHLD возвращает EOF в stdin (и всякий раз, когда отец получает EOF, он закрывается), но почему SIGCHLD возвращает EOF?
Если это нормально .. как избежать, чтобы отец закрылся?