• linux系统清理僵尸进程记录


    在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程.  在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。

    如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程?

    #ps -ef | grep defunct

    或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。

    另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。

    Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie

    top命令中也统计了僵尸进程。或者使用下面的命令:

    ps -ef | grep defunct | grep -v grep | wc -l

    一般来说僵尸进程用kill杀不死,但是我们可以杀死僵尸进程的父进程。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

    一步步讲解

    首先ps -eo ppid,stat

    -e查看所有进程,-o可以查看用户自定义的状态,例如-o ppid查看所有进程的ppid,可选项pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

    这里我们选取ppid父进程的id和stat状态

    然后ps -eo ppid,stat|grep Z从所有进程中的stat状态中选择状态为Z也就是zombie的进程

    接着ps -eo ppid,stat|grep Z|cut 1-5因为我们只要僵尸进程的父进程id,所以使用cut来选取父进程id

    最后ps -eo ppid,stat|grep Z|cut 1-5|xargs kill -9将前面选取的父进程id作为参数发送给kill -9去执行。

    到此我们杀死了所有僵尸进程的父进程,僵尸进程一般也都已经杀死了。

  • 相关阅读:
    用SQL SERVER取分组数据第一条:查出每个班级的成绩第一名
    [转]spring beans.xml
    [转]为什么要使用框架
    MySQL 5.6 for Windows 解压缩版配置安装
    [转]hql 语法与详细解释
    [转]slf4j + log4j原理实现及源码分析
    [转]最详细的Log4j使用教程
    yii2 checkbox 的使用实例
    Magento Order 状态详解
    yii2 设置多个入口文件
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/6962327.html
Copyright © 2020-2023  润新知