我对 c 和编程非常陌生,需要一些帮助。在 linux(cygwin) 上的 c 中,我需要在退出时删除所有子进程。我已经查看了其他类似的问题,但无法使其正常工作。我试过了-
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,当我使用cygwin时#include <sys/prctl.h>
,cygwin说它找不到文件或目录,我不知道要为它安装什么包。另外,如果我的prctl()
功能起作用,那会杀死所有的僵尸吗?
我的程序是一个客户端服务器,我的服务器 forks() 来处理每个客户端。我想当服务器关闭时不会留下任何剩余的僵尸。