调用release_task()函数?

时间:2011-06-08 04:31:27

标签: process linux-kernel wait

Linux kernel中,在进程终止后,通过调用process descriptor函数从系统中删除进程的release_task()

我相信,父进程在子进程上发出的wait()系统调用在子进程终止时调用release_task()函数。

假设父进程没有显式发出wait()系统调用,如何调用release_task()函数并解除分配子进程的进程描述符?

2 个答案:

答案 0 :(得分:3)

如果父进程没有wait(2)子进程,则该子进程为zombie。只要父母生活,孩子就无法收获。当父母去世时,他所有未等待的孩子都被init收养。 init的一项工作是定期等待孩子(从而释放相关资源)

答案 1 :(得分:0)

release_task()函数从僵尸进程的描述符中分离出最后的数据结构;它以两种可能的方式应用于僵尸进程:如果父对象不接收来自孩子的信号,则通过 do_exit()函数,或者通过 wait4()或 waitpid()系统调用。在后一种情况下,该函数还将回收进程描述符使用的内存,而在前一种情况下,内存回收将由调度程序完成,因为 do_exit()调用 schedule( )在最后一步。

有关详细信息,请参阅本书 - 了解Linux内核:I / O端口和进程管理