Я очень новичок в c и программировании, и мне нужна помощь. В c on linux (cygwin) мне необходимо удалить все дочерние процессы при выходе. Я просмотрел другие подобные вопросы, но не могу заставить его работать. Я пробовал-
atexit(killzombies); //in parent process
void killzombies(void)
{
printf("works");
kill(0, SIGTERM);
printf("works");
if (waitpid(-1, SIGCHLD, WNOHANG) < 0)
printf("works");
}
по какой-то причине «работает» даже никогда не печатается. Я нажимаю ctrl + c, чтобы выйти.
ТАКЖЕ я пробовал-
prctl(PR_SET_PDEATHSIG, SIGHUP); //in child process
signal(SIGHUP, killMe);
void killMe()
{
printf("works");
exit(1);
}
но поскольку я использую cygwin, когда я #include <sys/prctl.h>
, cygwin говорит, что не может найти файл или каталог, и я не знаю, какой пакет для него установить. Кроме того, если моя функция prctl()
сработает, убьет ли это всех зомби?
Моя программа является клиентским сервером, и мой сервер forks() обрабатывает каждого клиента. Я полагаю, что после выключения сервера не останется зомби.