如果找到父进程号,然后找到kill父进程,子进程(僵尸进程)将托管到其他进程(如init进程)中,然后由init进程释放子进程的尸体(task_struct)。
除了通过ps 的状态来查看Zombi进程,还可以用如下命令查看:
[oracle@rac1 ~]$ ps -ef|grep defun
oracle 13526 12825 0 16:48 pts/1 00:00:00 grepdefun
oracle 2833028275 0 May18? 00:00:00 [Xsession]<defunct>
僵尸进程解决办 法:
(1)改写父进程,在子进程死后要为它收尸。
具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行 waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管对的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。
(2)把父进程杀掉。
父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。如:
kill -9 `ps -ef |grep "Process Name" | awk '{ print $3 }'`
其中,“ProcessName”为处于zombie状态的进程名。
(3)杀父进程不行的话,就尝试用skill -t TTY关闭相应终端,TTY是进程相应的tty号(终 端号)。但是,ps可能会查不到特定进程的tty号,这时就需要自己判断了。
(4)重启系统,这也是最常用到方法之一。
2.6 X (task_dead -exit_dead):退出状态,进程即将被销毁
进程在退出过程中也可能不会保留它的task_struct。比如这个进程是多线程程序中被detach过的进 程。或者父进程通过设置sigchld信号的handler为sig_ign,显式的忽略了sigchld信号。(这是posix的规定,尽管子进程的退出信号可以被设置为sigchld以外的其他信号。)
此时,进程将被置于exit_dead退出状态,这意味着接下来的代码立即就会将该进程彻底释放。所以exit_dead状态是非常短暂的,几乎不可能通过ps命 令捕捉到。
三. 进程状态变化说明
3.1 进程的初始状态
进程是通过fork系列的系统调用(fork、clone、vfork)来创建的,内核(或内核模块)也可以通过kernel_thread函数创建内核进程。这些创建子进程的函数本质上都完成了相同的功能——将调用进程复制一份,得到子进程。(可以通过选项参数来决定各种资源是共享、还是私有。)
那么既然调用进程处于task_running状态(否则,它若不是正在运行,又怎么进行调用?),则子进程默认也处于task_running状态。
另外,在系统调用调用clone和内核函数kernel_thread也接受clone_stopped选项,从而将子进程的初始状态置为 task_stopped。
3.2 进程状态变迁
进程自创建以后,状态可能发生一系列的变化,直到进程退出。而尽管进程状态有好几种,但是进程状态的变迁却只有两个方向——从task_running状态变为非task_running状态、或者从非task_running状态变为task_running状态。
也就是说,如果给一个task_interruptible状态的进程发送sigkill信号,这个进程将先被唤醒(进入task_running状态),然后再响应sigkill信号而退出(变为task_dead状态)。并不会从task_interruptible状态直接退出。
进 程从非task_running状态变为task_running状态,是由别的进程(也可能是中断处理程序)执行唤醒操作来实现的。执行唤醒的进程设置被唤醒进程的状态为task_running,然后将其task_struct结构加入到某个cpu的可执行队列中。于是被唤醒的进程将有机会被调度执行。
而进程从task_running状态变为 非task_running状态,则有两种途径:
1、响应信号而进入task_stoped状态、或task_dead状态;
2、执行系统调用主动进入task_interruptible状态(如nanosleep系统调用)、或task_dead状态(如exit系统调用);或由于执行系统调用需要的资源得不到满足,而进入task_interruptible状态或task_uninterruptible状态(如select系统调用)。
显然,这两种情况都只能发生在进程正在cpu上执行的情况下。
1.文章《如何处理僵尸进程——如何避免僵尸进程!》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《如何处理僵尸进程——如何避免僵尸进程!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好