首先说说:僵尸进程是什么?

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。

我们都知道进程的工作原理。我们启动一个程序,开始我们的任务,然后等任务结束了,我们就停止这个进程。进程停止后, 该进程就会从进程表中移除。

僵尸进程啥危害?

由于子进程的结束和父进程的运行是一个不同过程,父进程无法判断子进程什么时候结束. 或者说不知道 子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNⅨ提供可用机制,这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程释放. 但这样就导致了问题,如果进程不更新掉,那么保留的那段信息就不会释放,其进程号就会一直被占用,系统进程号有限,如果大量的产生僵尸进程,可能因为进程太多占用无法产生新的进程,这应该避免。

1、那么如何查看僵尸进程呢?

如何查看linux系统上的僵尸进程,或者如何统计有多少僵尸进程?

命令:ps -ef | grep defunct

或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思,使用top命令查看,如果状态为Z也就是(zombie process)说明它就是僵尸进程。

Tasks: 85 total, 2 running, 82 sleeping, 0 stopped, 0 zombie

top命令也可以查看。或者使用下面的命令:

ps -ef | grep defunct | grep -v grep | wc -l

2、如何杀死僵尸进程?

一般僵尸进程很难直接kill掉,不过您可以kill父进程(僵尸父亲),“父亲”死后,僵尸进程成为”孤儿进程”,接着给init它始终会负责清理僵尸进程.紧随着父亲消失了,儿子也就跟着消失了。

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

kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`

当然了,如果您精通其他语言的话,当真是简单方便

3、如何避免僵尸进程?

对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结 束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。

signal(SIGCHLD,SIG_IGN);

用两次fork()参数,而且使紧跟的子进程直接退出,让孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。

Linux如何检测到僵尸进城,如何在linux下查看僵尸进程相关推荐

  1. linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)

    定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...

  2. linux查看进程grep工作组,Linux下查看一个进程打开了哪...-linux 如何找到进程的工作目录...-使用 grep 恢复误删的文本文件_169IT.COM...

    Linux下查看一个进程打开了哪些文件的命令示例,供大家学习参考. 查看进程14755(httpd)打开了哪些文件: 代码如下: localhost:~# lsof -p 14755 COMMAND ...

  3. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

  4. linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国

    导读:当 Linux 系统连接到 SAN(存储区域网络)后,你需要重新扫描 iSCSI 服务以发现新的 LUN.本文字数:3394,阅读时长大约:4分钟https://linux.cn/article ...

  5. linux命令行运行c程序,如何在Linux中编写和运行C程序

    Linux正在成为开发人员的编程天堂,成为开源和免费操作系统. Turbo C编译器已经是一种编译程序的旧方法,所以让程序员转向Linux以获得新的编程环境. 在本文中,我们将解释如何编写,编译和运行 ...

  6. linux怎么修改sftp默认端口,如何在 Linux 系统中如何更改 SFTP 端口

    SFTP(SSH文件传输协议)是一种安全文件协议,用于通过加密连接在两个主机之间传输文件. 它还允许您对远程文件执行各种文件操作并恢复文件传输. SFTP可以替代旧版FTP协议. 它具有FTP的所有功 ...

  7. linux 连接两个异构网,如何在Linux(或异构)网络上共享计算机?

    在有关共享计算机的这两篇文章中的第 1 部分中,我描述了我的异构本地网络以及如何使用它来比较和测试不同操作系统和体系结构上的应用程序.有几种技术使一台工作站上的用户可以运行位于另一台工作站上的应用程序 ...

  8. Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件

    JSON 文件非常棒,因为它们以人类可读的格式存储数据集合.然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦. • 来源:linux.cn • 作者:Abhishek Pra ...

  9. Linux上下载chronyd安装包,如何在Linux中安装和使用Chrony时间同步

    原标题:如何在Linux中安装和使用Chrony时间同步 来自:Linux迷 https://www.linuxmi.com/ Chrony是网络时间协议(NTP)的灵活实现.它用于同步来自不同NTP ...

最新文章

  1. 怎样创造计算机语言,如何创建编译成JavaScript的编程语言
  2. 浅入“Block Formatting Context”
  3. 文巾解题 1833. 雪糕的最大数量
  4. SAP ABAP 中一些常用函数
  5. mysql数据库表的导入导出
  6. 微软拥抱开源_如何拥抱开源劳动力
  7. 海思 K3V2的前世今生
  8. 详解什么是运营商大数据?
  9. 设计模式之简单工厂模式和抽象工厂模式
  10. 移动Web UI组件库汇总
  11. Docker 基础 (一)
  12. accumulate的用法
  13. 【Android Studio探索之路系列】之四:Android Studio快捷键
  14. 什么是CCNA?(及相关概念)
  15. rabbitmq消费端auto和manual区别;处理mq的requeue
  16. 掌握这些电脑知识,你会玩得很无耻!
  17. 利用shell脚本将json文件导入es
  18. 大班科学计算机的发明应用教案,大班科学教案:《中国古代四大发明》
  19. 计算机科学速成课笔记(详解)
  20. 手机摄像头驱动_华为Mate40和iPhone12换机潮下的手机摄像头行业“三剑客”横评:舜宇光学、欧菲光、丘钛科技...

热门文章

  1. pandas的loc[ ]和iloc[ ]方法解析
  2. 武大计算机科学与技术弘毅学堂,弘毅学堂
  3. pygame像素地图的实现
  4. SIGGRAPH中海洋的研究学习
  5. 单片机:c语言实现秒表计数(按键开始,结束,重置)
  6. 如何使用远程桌面连接远程计算机?
  7. 通过ONIE安装NOS系统
  8. 蓝桥杯-发现环(python-简单Tarjan算法)
  9. 计算机系男生横幅,男生节标语横幅
  10. C++中的struct