Tag: atexit

在父进程退出时终止子进程

我对c和编程很新,需要一些帮助。 在Linux上的c(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 ,cygwin说它找不到文件或目录,我不知道要为它安装什么包。 此外,如果我的prctl()函数工作,会杀死所有的僵尸吗? 我的程序是客户端服务器,我的服务器forks()来处理每个客户端。 我想在服务器关闭时不留下任何剩余的僵尸。

vfork()atexit断言失败

我想了解下面这段代码 #include #include #include int main() { pid_t pid ; unsigned int i=0; pid=vfork(); switch(pid) { case -1: // some sort of error puts(“fork error”); break; case 0: // the child process while(i<100) { printf("%d\n", i); i++; } break; default: //parent while(i<1000) { printf("%d\n", i); i++; } break; } // _exit(0); } 请不要告诉我vfork()是坏事和这些事情。我知道它是,但正是在这段代码中正在发生的事情导致了这种错误。 提前致谢

存在一种在不使用全局变量的情况下释放atexit或类似内存的方法?

我正在用C开发一个项目,我需要释放已分配的内存,并在退出之前关闭所有打开的文件。 我决定实现一个clean函数来完成所有这些工作并用atexit调用它,因为有很多可能的退出场景。 问题是atexit不允许我用参数设置函数,所以我不能发送clean需要在进程结束时释放的指针。 所以我需要将每个可能需要释放的指针声明为全局变量,并且每个可能在程序中保持打开的文件? (我已经这样做但看起来不太好)或者确实存在类似的function,允许发送参数的atexit ? 或者更多可能还有另一种我失踪的方式?

释放atexit()

在atexit()函数中释放内存有什么意义吗? 我有一个全局变量,在启动后获得malloc。 我可以编写一个atexit()函数来释放它,但是当程序退出时,系统是不是要回收所有内存? 整洁和积极清理自己有什么好处吗?