zoukankan      html  css  js  c++  java
  • 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去执行。

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

  • 相关阅读:
    Poj 3177 Redundant Paths (双连通分支+节点统计)
    Uva 796 Critical Links (割边+排序)
    Lightoj 1020
    Flip Game---poj1753(状压+bfs)
    Best Cow Line---poj3617(贪心)
    滑雪---poj1088(动态规划+记忆化搜索)
    King's Quest---poj1904(连通图缩点)
    Steady Cow Assignment---poj3189(多重匹配+二分)
    B. Berland National Library---cf567B(set|模拟)
    HDU Today---hdu2112(最短路-_-坑在是无向图)
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/6962327.html
Copyright © 2011-2022 走看看