Linux里面什么是僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程都将成为一个僵尸进程。如果父进程先退出,子进程被init接管,子进程退出后init会收回其占用的相关资源。
我们都知道进程的工作原理。我们启动一个程序,开始我们的任务,然后等任务结束了,我们就停止这个进程。进程停止后,该进程就会从进程表中移除。
你可以通过System-Monitor查看当前进程。
In UNIX System terminology, a process that has terminated,but whose parent
has not yet waited for it, is called a
zombie.在Unix系统中,一个进程结束了,但是它的父进程没有等待它,那么它将变成一个僵尸进程。但是如果该进程的父进程已经先结束了,那么该进程就不会变僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init来接管他,成为他的父进程。
怎么查看僵尸进程?
利用命令ps,可以看到有父进程ID为1的进程是孤儿进程;s状态为z的是僵尸进程。
注意:孤儿进程是尚未终止但已停止的进程,但其父进程已经终止,由init收养;而僵尸进程则是已终止的进程,其父进程不一定终止。
一个已经终止,但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息、释放它仍占用的资源)的进程被称为僵死进程(Zombie Process)。
相关处理办法:
在Linux中可以用 ps auwx 发现僵尸进程
a all w/ tty,including other users 所有窗口和终端,包括其他用户的进程
u user-oriented 面向用户(用户友好)
-w,w wide output 宽格式输出
x processes w/o controlling ttys 在僵尸进程后面 会标注
ps axf 看进程树,以树形方式现实进程列表
ps axm 会把线程列出来,在linux下进程和线程是统一的,是轻量级进程的两种方式。
ps axu 显示进程的详细状态
===========================================
killall kill -15 kill -9 一般都不能杀掉 defunct进程
用了kill -15,kill -9以后 之后反而会多出更多的僵尸进程
kill -kill pid fuser -k pid 可以考虑杀死他的parent process,
kill -9 他的parent process
参见:网页链接