• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • bios
  • 系统安装
  • 系统进程
  • Windows
  • LINUX
  • RedHat/Centos
  • Ubuntu/Debian
  • Fedora
  • Solaris
  • 麒麟系统
  • 红旗Linux
  • 苹果MAC
  • 注册表
  • 其它系统
您的位置:首页 > 操作系统 >LINUX > Linux系统中查杀僵尸进程的基本方法讲解

Linux系统中查杀僵尸进程的基本方法讲解

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-05-12

佚名 通过本文向大家介绍了linux系统中,linux系统中git命令,linux系统中链接分为,linux 系统中打开xls,linux系统中安装软件等相关知识,希望对您有所帮助,也希望大家多多支持linkedu.com

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。

一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)


进程的危害
由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道 子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放. 但这样就导致了问题,如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

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

另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。

另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

3、如何避免僵尸进程?
处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结 束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程

或者

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Linux系统中为php添加pcntl扩展
  • MySQL在Linux系统中隐藏命令行中的密码的方法
  • Linux系统中把文件拷贝到U盘的方法
  • linux系统中如何安装程序、软件的几种方法
  • Linux系统中tar压缩包怎么解压?
  • linux系统中怎么查看cpu信息?
  • linux系统中怎么结束boa进程?
  • linux系统中怎么实现文本界面转化为图形界面?
  • Linux系统中安装使用ntfs-3g挂载NTFS分区的教程
  • Linux系统中安装和使用Axel下载工具的教程

相关文章

  • 2017-05-12在Linux系统中批量删除多个文件的方法总结
  • 2017-05-12Linux系统中使用dd命令检测硬盘性能的方法
  • 2017-05-12Linux Kernel 4.10第5个候选版本RTM版发布 2月12日发布正式版
  • 2017-05-12杀死Linux中的defunct进程(僵尸进程)的方法指南
  • 2017-05-12Linux上安装使用FTP服务器ProFTPD的教程
  • 2017-05-12linux系统磁盘分区及把磁盘挂载到系统中的方法
  • 2017-05-12linux下.run文件的安装与卸载方法
  • 2017-05-12实例讲解Linux系统的服务器的DNS相关配置
  • 2017-05-12Linux系统中的curl命令使用教程
  • 2017-05-12Linux禁用root账户的方法

文章分类

  • bios
  • 系统安装
  • 系统进程
  • Windows
  • LINUX
  • RedHat/Centos
  • Ubuntu/Debian
  • Fedora
  • Solaris
  • 麒麟系统
  • 红旗Linux
  • 苹果MAC
  • 注册表
  • 其它系统

最近更新的内容

    • 全面讲解在Linux系统中安装和配置HAProxy的过程
    • Linux下配置Docker容器间网络连接的教程
    • Linux中基本的模式切换与用户登陆操作讲解
    • Linux系统下强大的lsof命令使用宝典
    • Linux下partprobe命令的使用详解
    • 配置Samba实现Linux和Windows系统之间的文件互访
    • linux 账户管理命令 useradd、groupadd使用方法
    • 在Linux系统下运行WebOS的简单方法
    • 六款常见的Linux操作系统推荐
    • Linux kernel模块管理相关详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有