zoukankan      html  css  js  c++  java
  • 僵尸进程的清除

    僵尸进程的清理
    僵尸进程的清理方法还是很简单的,不过我们先回顾一下基础概念
    僵尸进程:一个父进程利用fork创建子进程,如果子进程退出,而父进程没有利用wait方法或者waitpid方法来获取子进程的状态信息,那么子进程的状态依然保存在系统中。
    与之对应的就是孤儿进程:一个父进程退出, 而它的一个或几个子进程仍然还在运行,那么这些子进程就会变成孤儿进程,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集的工作

    所以说孤儿进程最后会被系统的老祖宗init 1进程来收养,但是僵尸进程则不然,他一直保存在系统里面并占用系统的资源。所以一旦出现大量的僵尸进程,我们势必要解决掉才可以。
    最简单的方法就是重启系统,但是太low了。下面介绍一个方法:
    1、使用top发现僵尸进程

    root@aaa:~ # top
    last pid: 27676;  load averages:  0.83,  0.78,  0.70      
    103 processes: 1 running, 101 sleeping, 1 zombie
    CPU:  0.2% user,  0.0% nice,  1.1% system,  0.0% interrupt, 98.7% idle
    

    此时发现一个僵尸进程
    2、找到该僵尸进程

    root@freenas:~ # ps aux | grep defunct | grep -v grep
    root       52405    0.0  0.0      0      0  -  Z    21Sep20       0:00.00 <defunct>
    

    第二列就是该僵尸进程的pid号,
    3、找到其该僵尸进程的父进程的pid号,即ppid

    root@freenas:~ # ps axjf | grep defunct | grep -v grep
    USER            PID  PPID  PGID   SID JOBC STAT TT           TIME COMMAND
    root          52405 52403  5107  5107    0 Z     -        0:00.00 <defunct>
    

    可以看到父进程pid号是52403。
    我们看看这个父进程是干什么的

    root@freenas:~ # ps aux | grep -v grep | grep 52403
    root       52403    0.0  0.0  13040   2496  -  I    21Sep20       0:00.00 /usr/bin/bc
    

    原来是一个bc程序,kill掉
    4、kill掉其父进程
    kill掉父进程的目的就是让这个僵尸进程变成孤儿进程,进而被系统的init进程来收养,达到清理僵尸进程的目的

    root@freenas:~ # kill -9 52403
    

    ok了,问题解决。
    想根本解决僵尸进程的问题,那么需要从程序的角度出发来优化代码才可以。

  • 相关阅读:
    20款时尚的 WordPress 博客主题【免费下载】
    垂涎欲滴!30个美味的食品类移动应用程序【上篇】
    Skippr – 轻量、快速的 jQuery 幻灯片插件
    Boba.js – 用于 Google 统计分析 JavaScript 库
    长期这么做的后果就是人民劳苦而得不到该有的回报,怎么能不垮
    左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据
    百度后端C++电话一面
    Web 开发和数据科学家仍是 Python 开发的两大主力
    Consul架构
    去除两端逗号-JS
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/13926958.html
Copyright © 2011-2022 走看看