日期:2014-05-16  浏览次数:20675 次

关于僵死进程,求助
如果子进程终止,但是父进程为对他进行善后处理(获取子进程的有关信息,释放它仍占用的资源),这样的进程就叫僵死进程。

请问,进程终止后还有留在哪里的哪些资源系统不能释放,必须要由父进程去处理?

------解决方案--------------------
好吧,这个是linux内核 的一些概念了,这么说吧,每个进程都有每个进程的 task_struct ( 存储在每个task的栈区的底部,), thread_info, 最重要的是 内核栈 区的保存 ,这个资源是不会被释放的,而一个进程退出了,只会释放它创建出的东西,比如 mmap fd sem等等信息,因为这是它自己创建的,由它自己回收是正常的。

那什么不是它自己创建的呢?task_struct thread_info 和 stack。这些信息如果内核不关心的话,直接丢弃好了,当然肯定会有人关心,比如出错的时候,肯定要知道它到底执行了那些操作(stack保存着)。

task_struct 就是每个进程的一个标示一样,里面存储着,你占用那些资源,调度,等级,nice值,等等。

你可以这样理解, 父亲和儿子的关系 父亲死了,那儿子只好被上帝(init 进程 , 上帝是创造一切东西的东东)领养,如果儿子死了,那父亲要去为儿子收尸(并看看儿子身上的状态,找死因)。