进程中的僵尸赶快来杀

这些进程已经死亡,但没有释放系统资源,包括内存和一些一些系统表等,如果这样的进程很多,会引发系统问题。用ps -el看出的进程状态如果是Z,就是僵尸进程。 
  ps -ef|grep defunc可以找出僵尸进程. 
  有些ZOMBIE进程时用kill -9也不能杀死,而且消耗了很多系统资源不能释放,如果系统在shutdown时发出信息:some process wouldn’t die. 这就意味这有些进程不能被reboot发出的kill –9杀掉,这些很可能就是僵尸进程。

  可以用ps 的 – l 选项,得到更详细的进程信息. 
  F(Flag):一系列数字的和,表示进程的当前状态。这些数字的含义为: 
  00:若单独显示,表示此进程已被终止。 
  01:进程是核心进程的一部分,常驻于系统主存。如:    sched、 vhand 、bdflush 等。 
  02:Parent is tracing process. 
  04 :Tracing parent‘s signal has stopped the process; the parent is waiting ( ptrace(S)). 
  10:进程在优先级低于或等于25时,进入休眠状态,而且不能用信号唤醒,例如在等待一个inode被创建时    
  20:进程被装入主存(primary memory) 
  40:进程被锁在主存,在事务完成前不能被置换   e 
  S(state of the process ) 
  O:进程正在处理器运行  
  S:休眠状态(sleeping) 
  R:等待运行(runable)    
  I:空闲状态(idle) 
  Z:僵尸状态(zombie)    
  T:跟踪状态(Traced) 
  B:进程正在等待更多的内存页 
  C(cpu usage):cpu利用率的估算值

  清除ZOMBIE(僵尸)进程可以使用如下方法: 
  1> kill –18 PPID (PPID是其父进程) 
  这个信号是告诉父进程,该子进程已经死亡了,请收回分配给他的资源。 
  2>如果不行则看能否终止其父进程(如果其父进程不需要的话)。先看其父进程又无其他子进程,如果有,可能需要先kill其他子进程,也就是兄弟进程。方法是: 
  kill –15 PID1 PID2(PID1,PID2是僵尸进程的父进程的其它子进程)。 
  然后再kill父进程:kill –15 PPID

  这样僵尸进程就可能被完全杀掉了。

时间: 2024-10-06 18:34:42

进程中的僵尸赶快来杀的相关文章

Linux中的僵尸进程和孤儿进程

在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程.        操作系统内核以进程标识符(Process Identifier,即PID)来识别进程.进程0是系统引导时创建的一个特殊进程,在其调用fork创建出一个子进程(即PID=1的进程1,又称init)

一起聊聊 Linux 系统中的僵尸进程

Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.僵尸进程如何产生的?如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了.那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号.进程的退出状态.进程运行的

linux中的僵尸进程

1.什么是僵尸进程? 僵尸进程是指子进程比父进程先结束,而父进程却没有回收子进程,释放子进程占用的资源.僵尸进程也一直在进程表中占着一个slot,但进程表容量有限,defunct进程不仅占用系统资源,还影响系统性能,如果其数目较多还可能导致系统瘫痪.这里有个形象的解释:进程在退出后就立刻变成了僵尸,然后等父进程收尸:如果这时它的父进程已经死了,也就是说这个进程是个孤儿,它的父进程临死前"托孤"的init进程,也就是它的养父,会帮它收尸.如果这里它的父进程还没死,就要看这个父进程在做什么

Linux进程实践(2) --僵尸进程与文件共享

孤儿进程与僵尸进程 孤儿进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程.(注:任何一个进程都必须有父进程) //生成孤儿进程 int main(int argc, char *argv[]) { pid_t pid = fork(); if (pid < 0) err_exit("fork error"); else if (pid > 0) exit(0); else { sleep(10); cout << "Chil

linux c中的僵尸问题

给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵尸状态,那么它的所有僵尸子进程的父进程ID将被重置为1(init进程).继承这些子进程的init进程将清理它们(init进程将wait它们,从而去除僵尸状态). 但通常情况下,我们是不愿意留存僵尸进程的,它们占用内核中的空间,最终可能导致我们耗尽进程资源.那么为什么会产生僵尸进程以及如何避免产生僵尸

获取其他进程中“Internet Explorer_TridentCmboBx”的内容

function GetTridentCmboBxText( // 获取其他进程中“Internet Explorer_TridentCmboBx”的内容   mHandle: THandle; // ComboBox句柄   mStrings: TStrings // 输出列表 ): Boolean; // 返回获取数据是否成功 var   I: Integer;   vItemCount: Integer;   vAddress: array[0..4] of Char;   vProces

获取其他进程中StatusBar的文本

(*// 标题:获取其他进程中StatusBar的文本 说明:Window2000+Delphi6调试通过 设计:Zswang 支持:[email protected] 日期:2005-02-22 //*) uses CommCtrl; function GetStatusBarText(mHandle: THandle): string; var   vBuffer: array[0..$1000] of Char;   vSize: Integer;   I: Integer;   vCou

(转)同一进程中的线程究竟共享哪些资源

线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID      每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标识线程. 2.寄存器组的值       由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须

Linux进程的栈和进程中函数的栈帧

主要理解了Linux进程的栈和函数的栈帧的区别和联系 上图中刻画的是一个Linux进程的结构图,其中本文想要关注的栈如上图所示是栈底在0xc0000000地址递减的一块进程内存区域 Linux系统中为每个进程分配的实际大小未做深究 Linux进程的栈的整体认知就是这么多,即 1)栈底在0xc0000000(并不需要栈底指针,函数的栈帧才需要栈底指针) 2)栈的增长方向,地址递减方向 3)栈顶指针esp 4)大小未知(不是本文关注的重点) 5)里面存放的内容是什么呢? 另一个概念是上文中提到的函数