Tag: zombie process

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

我对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()来处理每个客户端。 我想在服务器关闭时不留下任何剩余的僵尸。

在内核中处理线程的正确方法?

我已经看到了各种各样的零散信息,但我似乎无法得到最终答案。 你如何清理内核中的僵尸线程? 为了确保并在内核中生成处理线程的最终正确方法,我想更广泛地问这个问题。 如何在Linux内核中创建,终止和清理线程? 到目前为止我所拥有的是: thread_func: exited = 0; while (!must_exit) do stuff exited = 1; do_exit(0) init_module: must_exit = 0; exited = 1; kthread_run(thread_func, …) /* creates and runs the thread */ cleanup_module: must_exit = 1; while (!exited) set_current_state(TASK_INTERRUPTIBLE); msleep(1); /* How do I cleanup? */ 我发现清理解决方案最接近的是release_task ,但我没有找到任何谈论它的地方。 我想,因为线程函数是kthread_create , kthread_run等,应该有一个kthread_join或kthread_wait ,但是没有。 do_wait似乎也有可能,但它不需要struct task_struct […]

如何防止僵尸子进程?

我正在编写一个服务器,它使用fork()为客户端连接生成处理程序。 服务器不需要知道分叉进程会发生什么 – 它们自己工作,当它们完成时,它们应该只是死而不是变成僵尸。 什么是实现这一目标的简单方法?