我对 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,当我#include <sys/prctl.h>
,cygwin 说它找不到该文件或目录,并且我不知道要为其安装什么包。
另外,如果我的prctl()
如果这个功能起作用的话,会杀死所有的僵尸吗?
我的程序是一个客户端服务器,我的服务器 forks() 来处理每个客户端。我想当服务器关闭时不会留下任何剩余的僵尸。
Your waitpid
不提供通常的参数,我很惊讶它没有崩溃。原型是:
pid_t waitpid(pid_t pid, int *status, int options);
第二个参数应该是pointer to an int
,您正在提供一个int
。
另请注意,您应该致电waitpid
for each孩子,你只是为了一个而呼唤它。
atexit()
仅当您正常退出时才会被调用。如果您通过 CTRL+C 退出,那么您需要从 SIGINT 上的处理程序调用您的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)