zoukankan      html  css  js  c++  java
  • linux 杀掉僵尸进程 (zombie process, defunct)

    本文说明为什么会出现僵尸进程 (zombie process, defunct),以及如何杀掉僵尸进程

    1. 为什么有僵尸进程

    僵尸进程出现在父进程没有回收子进程的 PCB 的时候,这个时候子进程已经结束,但是父进程没有回收它,所以保存了一份子进程的 PCB 在父进程的内核空间中。

    僵尸进程占用的是一个 PCB 结构体的内存空间,所以占用量不会太大,但是过多的僵尸进程就会出现内存泄露。

    2. 如何杀掉僵尸进程

    解决的办法就是给父进程发送一个终止的信号。例如 SIGKILL / SIGINT / SIGTERM 信号。

    只要父进程终止了,那么僵尸进程的 PPID 就变成了 init 进程。那么自然 init 进程就会回收子进程的 PCB。

    这样僵尸进程就被杀掉了。

    知道了原理和解决方法就好办了,下面的命令会自动 kill 所有的僵尸进程:

    ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9

    命令说明: 

    ps -e -o ppid,stat

        打印所有的进程的 ppid (父进程号) 和 stat (进程状态)

    grep Z

        找出僵尸进程

    cut -d" " -f2

        取 ppid 字段

    xargs kill -9

        强制 kill 这些父进程

  • 相关阅读:
    IP的幻觉
    糟糕的一天
    windows下批量生成文件
    基于Bandersnatch搭建本地pypi源
    vmware vsphere 无法启动故障;
    关于Centos7客户端代理配置
    怎样在交换机判断是否出现环路了呢?
    小小的网络故障
    express for LINUX
    ESXI 7.0 ovf 导出;
  • 原文地址:https://www.cnblogs.com/weiweifeng/p/7464426.html
Copyright © 2011-2022 走看看