linux僵尸进程和孤儿进程,如何查找僵尸进程数据,linux 查找僵尸进程

  linux僵尸进程和孤儿进程,如何查找僵尸进程数据,linux 查找僵尸进程

  一、死进程(僵尸进程)是什么?

  在Linux系统上,如果进程已经终止,但是他的父进程还没有等他(调用wait/waitpid),他就会变成僵尸进程。当通过ps命令观察进程的执行状态时,可以看到这些进程的状态栏已经失效。僵尸进程是一个死进程,但是它仍然在进程表中占据一个位置。

  但是,如果这个进程的父进程已经结束,它就不会成为僵尸进程。在每个进程结束时,系统会扫描当前系统上运行的所有进程,找出哪个进程是这个进程的子进程。如果是这样,Init进程将接管他并成为他的父进程。Init进程会自动等待子进程,所以Init继承的所有进程都不会变成僵尸进程。二。如果Linux上一个进程正在运行的子进程先于父进程终止,并且父进程不调用wait/waitpid,那么这个子进程就是僵尸进程。如果这个进程的父进程已经结束,它就不会成为僵尸进程。在每个进程结束时,系统会扫描当前系统上运行的所有进程,找出哪个进程是这个进程的子进程。如果是这样,Init进程将接管他并成为他的父进程。Init进程会自动等待子进程,所以Init继承的所有进程都不会变成僵尸进程。

  每个Linux进程在进程表中都有一个入口点,核心进程在执行进程时使用的所有信息都存储在入口点中。通过ps命令查看系统中的进程信息,可以查看进程表中的相关数据。Fork))当系统调用创建新进程时,核心进程会在“进程表”中为新进程分配入口点,并将相关信息存储在入口点对应的进程表中。这些信息之一是父进程的标识符。

  子进程的结束和父进程的执行是异步进程,父进程无法预测子进程何时结束。那么,是父进程太忙,子进程来不及等待,还是它不知道子进程什么时候结束,会导致子进程的状态信息丢失?

  不会。因为Linux提供了一种机制,如果父进程想在最后知道子进程的状态信息,它可以获得这种机制。机制是子进程完成生命周期后,执行exit()系统调用,释放进程的所有资源,包括内核打开的文件和占用的内存。然而,进程号进程ID、结束代码退出代码、结束状态TerminationstatusoftProcess、执行时间theamountofputimetakenbytheprocess等。

  也就是说,当进程死亡时,它并没有完全消失。该进程将终止并不再运行,但仍有数据等待父进程收集。父fork()终止子进程后,必须等待子进程终止(wait),或者waitpid)。这个wait()操作将导致子进程中的剩余数据丢失。

  三。僵尸进程的危害

  如果父进程不调用wait/waitpid,则保留的信息不会被释放,进程号将继续使用。然而,系统的进程表容量是有限的,并且可用的进程数也是有限的。如果出现大量僵尸进程,由于没有可用的进程号,系统将无法生成新的进程。

  因此,失效的进程不仅会占用系统的内存资源,还会影响系统的性能,过多的进程会导致系统瘫痪。此外,因为调度程序不能选择失效的进程,所以不可能使用kill命令删除失效的进程。唯一的办法就是重启系统。

  四。如何终止已失效的进程

  失效的进程是指出非法损害的进程,父进程和子进程之间不会有通信。有时候会变成“僵尸进程”,会一直留在系统里,直到重启。您可以尝试清除“kill -9”命令,但大多数情况下您不会使用它。

  为了终止这些失效的进程,您有两个选择:

  1.重新启动计算机

  2.继续阅读…

  首先,我们来看看系统中是否存在一个失效的进程:$ ps -Agrep defunct。

  一个

  输出5259?0:00:00SD_cicerodefunct

  12214 pts/1800336001:14 python已失效

  16989 pts/1800336004:43 python已失效

  python已失效

  一个

  2

  三

  四

  检查这些进程的ID及其父进程id: $ PS-ef

  一个

  UID PID PPID。

  =========================================================================================

  你的名字是4653 6128 0 17:07

  pts/18 00:00:00 grep-color=自动失效

  你的名字是5259 5258 0 15:58?00:00:00 [sd_cicero]停业

  你的名字12214 12211 4 16:41 pts/18 00:01:14[python]已失效

  你的名字16989 16986 20 16:45 pts/18 00:04:43[python]已失效

  你的名字20610 18940 99 16:48 pts/18 00:23:12[python]已失效

  一个

  2

  三

  四

  五

  六

  七

  UID:用户ID

  PID:进程ID

  PPID:父进程ID如果您使用命令“kill -9 12214”来尝试终止ID为12214的进程,可能不会成功。

  让我们试试$ kill -9 12214

  $ ps -Agrep已失效

  一个

  2

  输出5259?00:00:00 SD _西塞罗解散

  python已失效

  python已失效

  python已失效

  一个

  2

  三

  四

  进程12214还存在,也就是说你不能用kill杀死它。要成功终止这个进程,您需要在其父进程(ID 1211)上执行kill命令($ kill -9 12211)。将kill命令应用于所有这些进程的父进程ID,并验证结果($ ps -A grep defunct)。

  让我们试试$ kill -9 12211

  $ ps -Agrep已失效

  一个

  2

  输出5259?00:00:00 SD _西塞罗解散

  python已失效

  python已失效

  [1]杀死了bash main.sh

  一个

  2

  三

  四

  进程12214消失,表示僵尸进程可以被杀死僵尸进程的父进程杀死。如果前面的命令没有显示结果,那么就完成了!否则,也许你需要重启系统。

  -

  作者:DarrenXf

  资料来源:CSDN

  原文:https://blog.csdn.net/DarrenXf/article/details/82970809

  版权声明:本文为博主原创文章。转载请附上博文链接!转载于:https://www.cnblogs.com/lfxiao/p/10837115.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: