僵尸进程的查找及僵尸进程的kill

2023-11-13

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

之前的学习过程中时这样理解僵尸进程的:子进程先于父进程退出,并将退出原因保留在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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

僵尸进程的查找及僵尸进程的kill 的相关文章

  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • X 按键/释放事件捕获,与焦点窗口无关

    我想记录所有传入的按键事件 无论哪个窗口处于焦点状态或指针位于何处 我编写了一个示例代码 它应该捕获当前焦点窗口的按键事件 include
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • Linux Shellcode“你好,世界!”

    我有以下可用的 NASM 代码 global start section text start mov eax 0x4 mov ebx 0x1 mov ecx message mov edx 0xF int 0x80 mov eax 0x1
  • 将 bash 脚本作为守护进程运行

    我有一个脚本 它每 X 次运行我的 PHP 脚本 bin bash while true do usr bin php f my script php echo Waiting sleep 3 done 我怎样才能将它作为守护进程启动 要从
  • 在哪里可以找到所有 C 标准库的源代码?

    我正在寻找所有 C 标准库的完整源代码 也就是说 我正在寻找 stdio h stdlib h string h math h 等的源代码 我想看看它们是如何创建的 我认为这取决于不同的平台 但 Linux 或 Windows 都会受到欢迎
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • CMake:使用其他平台的生成器。如何?

    如何使用 CMake 在 Linux 上生成 Visual Studio 项目文件 你不能 您必须在 Windows 上运行 CMake 才能为 Visual Studio 生成
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 无法使用 tar -cvpzf 解压完整目录

    把我的头敲在这上面 I used tar cvpzf file tar gz压缩一个完整的目录 我将文件移动到另一台服务器 并尝试解压缩复制存档的目录 无法使其发挥作用 bash 3 2 tar xvpzf news tar gz tar
  • C 标准库函数与系统调用。哪个是“open()”?

    I know fopen 在C标准库中 所以我绝对可以调用fopen C 程序中的函数 我感到困惑的是为什么我可以打电话给open 功能也一样 open 应该是系统调用 所以它不是标准库中的C函数 因为我能够成功地调用open 函数 我调用
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件

随机推荐

  • LeetCode-Python-389. 找不同

    给定两个字符串 s 和 t 它们只包含小写字母 字符串 t 由字符串 s 随机重排 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 s abcd t abcde 输出 e 解释 e 是那个被添加的字母 第一种思路 转成
  • Java笔记:泛型、限定通配符与非限定通配符

    目录 1 泛型 2 限定通配符与非限定通配符 2 1 限定通配符 2 2 非限定通配符 3 PECS Producer Extends Consumer Super 原则 3 1 Producer Extends 3 2 Consumer
  • jar文件怎么打开 查看jar文件内容操作方法

    jar文件怎么打开 查看jar文件内容操作方法 jar文件是java项目生成的一个小的文件项目 也可以描述为一个java压缩包 里面封装了 许多java类以及方法 变量 很多用户想要查看jar文件内容 可是却不知道jar文件怎么打开 下面小
  • TorchServe环境构建+模型更新+新模型注册

    目录 1 背景 2 torchserve环境搭建 2 1jdk环境搭建 2 2 python 环境搭建 2 3 启动服务 2 3 1 注册模型 2 3 2 模型查看 2 3 3 接口调用 3 进阶功能 3 1 模型多版本管理 3 2 新模型
  • NLP神器Gensim库(一):入门操作

    Gensim是一款开源的第三方Python工具包 用于从原始的非结构化的文本中 无监督地学习到文本隐层的主题向量表达 它支持包括TF IDF LSA LDA 和word2vec在内的多种主题模型算法 支持流式训练 并提供了诸如相似度计算 信
  • 【值得收藏的种子搜索引擎】

    种子搜索引擎和磁力搜索引擎是用于搜索和下载种子文件和磁力链接的工具 本文将介绍五个值得收藏的子搜索引擎和磁力搜索引擎 并提供两个示例说明 BT Kitty BT Kitty是一个功能强大的子搜索引 可以搜索各种类型的种子文件和磁力链接 它的
  • nextjs开发 + vercel 部署 ssr ssg

    前言 最近想实践下ssr 就打算用nextjs 做一个人博客 vercel 部署 提供免费域名 来学习实践下ssr ssg nextjs 一个轻量级的react服务端渲染框架 vercel 由 Next js 的创建者制作 支持nextjs
  • FlinkCDC-自定义序列化器

    package com lcy app customer import com alibaba fastjson JSONObject import com alibaba ververica cdc debezium DebeziumDe
  • 【前端】React使用react-markdown+antd实现引入渲染markdown文件

    项目中遇见一个需求 要求直接在浏览器打开markdown文件进行预览 初次使用遇见一些坎坷 以下记录实现过程 将其封装成了一个组件 1 下载依赖 yarn add react markdown 其余样式插件 yarn add remark
  • centos7安装mysql5.7

    一 下载mysql5 7 1 下载地址 点击跳转 2 然后上传到服务器上面 解压命令 tar xvf mysql 5 7 36 1 el7 x86 64 rpm bundle tar 3 解压后得到以下的rpm包 4 依次安装所需要的rpm
  • 因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。

    依赖关系问题 仍未被配置dpkg 依赖关系问题使得 smbclient 的配置工作不能继续 smbclient 依赖于 samba common 2 3 5 8 dfsg 1ubuntu2 3 然而 软件包 samba common 尚未配
  • ubuntu 安装 多版本 cuda 11.4 11.8

    显卡 rtx3060 笔记本已经安装了 cuda 11 4 和 对应的cudnn 现在想要安装 cuda 11 8 和 cudnn 8 8 原理 新的 driver 可以 兼容 旧的 cuda sdk 旧的 driver 不能 兼容 新的c
  • matlab神经网络工具箱的使用

    单变量 单变量取数据 data load ex1data1 txt X data 1 y data 2 多变量取数据 data load ex1data2 txt X data 1 2 y data 3 运行train后弹出 对应的图 比如
  • gradle 添加构建依赖项

    gradle 添加构建依赖项 参考 添加构建依赖项 利用 Android Studio 中的 Gradle 构建系统 您可以轻松地将外部二进制文件或其他库模块作为依赖项添加到您的 build 中 这些依赖项可位于您的计算机上或远程代码库中
  • prometheus监控示例

    prometheus架构图 prometheus 各组件介绍 Prometheus Server 使用pull方式采集监控数据 在该组件上配置监控数据的采集和告警规则 Client Library 客户端库 为需要监控的服务生成相应的 me
  • 安装Redhat

    1 新建虚拟机 选典型 2 下一步 选择稍后安装操作系统 3 下一步 选择Linux 版本选择Red Hat Enterprise 8 版本是什么就选择什么 4 下一步 设置虚拟机名称以及位置 5 下一步 设置虚拟机磁盘容量 6 下一步 点
  • RocketMQ第五篇 RocketMQ API基本使用

    目录 生产者Product 消费者Consumer 前面已经学习了Rocket的基本知识 以及搭建MQ单机版和集群环境 下面开始进行实际开发 根据前面下载的RocketMQ源码 开展讲解RocketMQ 的基本使用 生产者Product 在
  • Python实战

    转载自Python研究者 作者阿辰 今天教大家如何爬取新浪网新闻数据 通过词云可视化展示新闻关键词 快速了解最新的新闻热点 这里爬取了2500条新闻数据进行演示 PS 这里采集的主要是国内最新新闻数据 写这篇文章的时候是4月26号 所以获取
  • 解决Spring的UnsatisfiedDependencyException异常的方法

    解决Spring的UnsatisfiedDependencyException异常的方法 1 引言 在使用Spring框架进行开发时 经常会遇到UnsatisfiedDependencyException异常 这个异常通常是由于依赖注入失败
  • 僵尸进程的查找及僵尸进程的kill

    首先我们来看看什么是僵尸进程 之前的学习过程中时这样理解僵尸进程的 子进程先于父进程退出 并将退出原因保留在pcb中 因此退出后不会自动释放所有资源 子进程退出后操作系统会通知父进程子进程退出了 你去获取一下原因 再完全释放子进程资源 若父