僵尸进程的查找及僵尸进程的kill
首先我们来看看什么是僵尸进程:
之前的学习过程中时这样理解僵尸进程的:子进程先于父进程退出,并将退出原因保留在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相关推荐
- linux窗口透明(全局透明,进程id查找wid,进程名称查找wid)
linux窗口透明 使用到了qt xcb-ewmh x11-xcb 效果图 如何实现 控制全部窗口透明 1.遍历WID树,的到全部窗口得wid 2.区别窗口属性,桌面和dock窗口不设置透明,其他窗口 ...
- linux里面有mysql的僵尸进程_linux 如何清理僵尸进程
定义 In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for ...
- linux如何kill僵尸进程,linux 如何杀死僵尸进程——原理及操作
linux 如何杀死僵尸进程 Posted on 2011 年 9 月 20 日 by Open-Source In UNIX System terminology, a process that h ...
- linux 检查僵死进程,Linux下杀僵尸进程办法
Linux认证辅导:Linux下杀僵尸进程办法 为了方便广大考生更好的复习,小编编辑整理提供了Linux认证:Linux下杀僵尸进程办法,以供各位考生考试复习参考,希望对考生复习有所帮助. 1) 检查 ...
- python僵尸进程和孤儿进程_python学习笔记——孤儿进程和僵尸进程
1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...
- linux 僵尸进程 fwrite,Linux之僵尸进程
僵尸进程 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程.如果父进程先退出 ,子进程将会被被init进程(init是系统进程,pid为1 ...
- linux mysql 僵尸进程_Linux 系统中僵尸进程
Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 僵尸 ...
- 【Linux】僵尸进程(Z状态)和孤儿进程
先了解下进程都有什么状态: 进程状态:就绪,阻塞,运行 linux下进程状态: 运行状态®:并不意味着进程一定在运行中,它表明进程在运行中,或在运行队列里(只要拿到时间片就能运行) 可中断休眠状态(S ...
- 宋宝华: 僵尸进程的成因以及僵尸可以被“杀死”吗?
僵尸不可能被杀死,因为它已经死了,不存在再死一次的问题.死的对立面是活,死者已死.只有活的进程才可能被杀死. 什么是僵尸 首先要明确一点,僵尸进程的含义是:子进程已经死了,但是父进程还没有wait它的 ...
最新文章
- ITextSharp使用说明
- ubuntu9.10安装显卡驱动
- linux中没有semanagea安装包,如何使用semanage管理SELinux安全策略
- java+调用jacoco_java操作jacoco
- const int *a和int*const a 的区别详解
- PAT乙级(1001 害死⼈不偿命的(3n+1)猜想)
- 【今日所得】1.29。。。
- python 顺序遍历文件夹下的文件
- Tomcat8卸载+重装
- 光载无线(RoF, Radio over Fiber)通信技术
- QT串口助手(五):文件操作
- Logitech Flow无法识别另一台电脑,显示“请启用其他计算机上的Logitech Flow”的问题
- raid读写速度对比_组建RAID 0前后的读写速度对比
- elementUI el-upload使用方法、上传限制数量且超出不显示上传按钮、删除闪一下、多个upload并排显示
- c语言二十四点算法,本文实例为大家分享了C语言经典24点算法的具体实现代码,供大家参考,具体内容如下1、概述 给定4个整数,其中每个数字只能使用一次;任意使用 + - * /...
- root权限下手动安装open gapps.2022-01-31
- linux命令 dmesg_如何在Linux上使用dmesg命令
- git 回退远端master/develop分支版本
- TP5 根据是否是手机端跳转到对应模板
- 基于KU115的FPGA加速卡