zoukankan      html  css  js  c++  java
  • 如何杀死defunct进程

    defunct进程是指出错损坏的进程,父子进程之间不会再通信。有时,它们会演变成“僵尸进程”,存留在你的系统中,直到系统重启。可以尝试 “kill -9” 命令来清除,但多数时候不管用。

    什么是僵尸进程?

    在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。

    但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。

    由于defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。所以必须要杀死这些defunct进程,你有两个选择:

    1)重启你的计算机

    2)继续往下读...

    查看系统中是否存在defunct进程:

    [root@dc test]# ps -ef | grep defunct
    root      5163  5158  0 15:42 pts/0    00:00:00 [logg] <defunct>
    root      5199  5198  0 15:42 pts/0    00:00:00 [hello] <defunct>
    root      5867  4490  0 16:17 pts/0    00:00:00 grep defunct
    [root@dc test]# 
    

    意味着存在2个defunct进程:一个logg进程,一个hello进程。这些进程之所以存在,可能是因为应用程序写得很烂或者用户做了不常见的操作。

    通过命令:ps -ef 得到 

    UID PID PPID C STIME TTY TIME CMD

    UID:用户ID

    PID:进程ID

    PPID:父进程ID

    如果尝试使用PID杀死该僵尸进程,可能会没有效果

    若要杀死该进程,应该对其父进程PPID下手,即kill -9 +PPID, 也就是使用(kill -9 5158)即可,其他僵尸进程同理。

  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/porkerface/p/11395167.html
Copyright © 2011-2022 走看看