首先我们来看看什么是僵尸进程:

之前的学习过程中时这样理解僵尸进程的:子进程先于父进程退出,并将退出原因保留在pcb中,因此退出后不会自动释放所有资源,子进程退出后操作系统会通知父进程子进程退出了,你去获取一下原因,再完全释放子进程资源。若父进程不管子进程的退出状态,则该子进程为了保存退出原因而将进入僵死状态,成为僵尸进程。

而百度百科的解释为:在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程…

为了更好的理解,所以我写了一段代码

#include <stdio.h>6 #include <unistd.h>7 #include <errno.h>8 9 int main()10 {11     int pid = fork();12 13     if (pid < 0) {14         //perror 是用于打印系统调用的错误原因15         perror("fork error");16         return -1;17     }else if (pid == 0) {18         printf("this is child!!\n");19     }else {20         printf("this is parent!!\n");21         while(1){22         sleep(1);23     }24     }25 26     return 0;27 }
~                       

由于父进程中有个死循环,所以父进程永远不会终止,按理来说此时由于父进程没有结束,所以子进程变为了一个僵尸进程。所以我赋值了另一个ssh渠道查看时果然有一个僵尸进程。(下图中第二行最后面的1 zombie表示:此时有一个僵尸进程)

上述查看系统中是否有僵尸进程,是通过top命令查看的(top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。)

一般的发现僵尸进程后就需要将僵尸进程kill,因为僵尸进程会造成资源泄漏的问题。

此时,这个僵尸进程是我们自己写的,但是当不是我们自己产生僵尸进程,该如何找到这个僵尸进程呢?

那么就要通过命令  ps -aux | grep Z   来查找这个僵尸进程。

此时可以看到<defunc>结尾的就是我们要找的,从中可以看到该僵尸进程的PID为8558,所以我们就可以用命令kill -9 8809来kill这个僵尸进程。

但是有的情况下时直接kill不了僵尸进程的,所以要通过kill其父进程的方法来间接的kill僵尸进程;

此时可以通过命名cat /proc/8809/status 查看该僵尸进程的信息。

可以看到僵尸进程的PID为8809;该僵尸进程的父进程的PID(即此处的PPID)为8808;所以此时用kill -9 8808就能将父进程Kill掉,与此同时也将僵尸进程kill掉了;在用top查看时,已经没有僵尸进程了;

至此,将一个僵尸进程找到并且kill,避免了僵尸进程造成的资源泄露的危害

再把其中的这几个命令归纳如下:

查看系统中是否有僵尸进程: top

查找该僵尸进程:ps -aux|grep Z            // 以<defunct>结尾的就是僵尸进程,此时也可看到僵尸进程的PID

根据僵尸进程的PID查看僵尸进程的详细信息:cat /proc/僵尸进程的PID/status

kill一个进程:kill -9 进程的PID

僵尸进程的查找及僵尸进程的kill相关推荐

  1. linux窗口透明(全局透明,进程id查找wid,进程名称查找wid)

    linux窗口透明 使用到了qt xcb-ewmh x11-xcb 效果图 如何实现 控制全部窗口透明 1.遍历WID树,的到全部窗口得wid 2.区别窗口属性,桌面和dock窗口不设置透明,其他窗口 ...

  2. linux里面有mysql的僵尸进程_linux 如何清理僵尸进程

    定义 In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for ...

  3. linux如何kill僵尸进程,linux 如何杀死僵尸进程——原理及操作

    linux 如何杀死僵尸进程 Posted on 2011 年 9 月 20 日 by Open-Source In UNIX System terminology, a process that h ...

  4. linux 检查僵死进程,Linux下杀僵尸进程办法

    Linux认证辅导:Linux下杀僵尸进程办法 为了方便广大考生更好的复习,小编编辑整理提供了Linux认证:Linux下杀僵尸进程办法,以供各位考生考试复习参考,希望对考生复习有所帮助. 1) 检查 ...

  5. python僵尸进程和孤儿进程_python学习笔记——孤儿进程和僵尸进程

    1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...

  6. linux 僵尸进程 fwrite,Linux之僵尸进程

    僵尸进程 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程.如果父进程先退出 ,子进程将会被被init进程(init是系统进程,pid为1 ...

  7. linux mysql 僵尸进程_Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 僵尸 ...

  8. 【Linux】僵尸进程(Z状态)和孤儿进程

    先了解下进程都有什么状态: 进程状态:就绪,阻塞,运行 linux下进程状态: 运行状态®:并不意味着进程一定在运行中,它表明进程在运行中,或在运行队列里(只要拿到时间片就能运行) 可中断休眠状态(S ...

  9. 宋宝华: 僵尸进程的成因以及僵尸可以被“杀死”吗?

    僵尸不可能被杀死,因为它已经死了,不存在再死一次的问题.死的对立面是活,死者已死.只有活的进程才可能被杀死. 什么是僵尸 首先要明确一点,僵尸进程的含义是:子进程已经死了,但是父进程还没有wait它的 ...

最新文章

  1. ITextSharp使用说明
  2. ubuntu9.10安装显卡驱动
  3. linux中没有semanagea安装包,如何使用semanage管理SELinux安全策略
  4. java+调用jacoco_java操作jacoco
  5. const int *a和int*const a 的区别详解
  6. PAT乙级(1001 害死⼈不偿命的(3n+1)猜想)
  7. 【今日所得】1.29。。。
  8. python 顺序遍历文件夹下的文件
  9. Tomcat8卸载+重装
  10. 光载无线(RoF, Radio over Fiber)通信技术
  11. QT串口助手(五):文件操作
  12. Logitech Flow无法识别另一台电脑,显示“请启用其他计算机上的Logitech Flow”的问题
  13. raid读写速度对比_组建RAID 0前后的读写速度对比
  14. elementUI el-upload使用方法、上传限制数量且超出不显示上传按钮、删除闪一下、多个upload并排显示
  15. c语言二十四点算法,本文实例为大家分享了C语言经典24点算法的具体实现代码,供大家参考,具体内容如下1、概述  给定4个整数,其中每个数字只能使用一次;任意使用 + - * /...
  16. root权限下手动安装open gapps.2022-01-31
  17. linux命令 dmesg_如何在Linux上使用dmesg命令
  18. git 回退远端master/develop分支版本
  19. TP5 根据是否是手机端跳转到对应模板
  20. 基于KU115的FPGA加速卡

热门文章

  1. 【Oracle】硬解析、软解析和软软解析
  2. Median Pyramid Hard题解
  3. 计算机组成原理7-主存储器—存储器与CPU的连接
  4. H264H265格式
  5. 部署hudson时报错解决方案
  6. 建设工程法规专科【2】
  7. 信息化App在「左」,数字化App在「右」
  8. QuickSearch eXtended配置
  9. 为什么我中签的不是股票,都是转债?
  10. torch.Tensor()与torch.tensor()