• 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去执行。

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

  • 相关阅读:
    Python 绘制图表之我见 ---一个java程序员的看法
    机器学习系统设计--1.4
    XUtils3 的 环境搭建与简单使用
    关于SAX
    TensorFlow之Varibale 使用方法
    安装Nvidia k80驱动步骤
    TensorFlow 在android上的Demo(1)
    Python 去剑式
    python编程技巧2
    python语言技巧
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/6962327.html
Copyright © 2020-2023  润新知