【转】Linux的僵尸进程解决攻略
Linux主机引起强悍的安全性和稳定而收到各方站长的喜爱,但是Linux有一定的局限性就是操作复杂,需要使用者掌握一定的基础只是,如果不懂得其中的运行原理,麻烦还是不少的,下面我们就僵尸进程这个问题来向大家简单介绍一下。
工具/原料
本教程仅针对Linux主机,需在unix系统中操作
步骤/方法
- 1
产生原因:
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。 - 2
原理分析:
每个Unix进程在进程表里都有一个进入点(entry),核心进程执 行该进程时使用到的一切信息都存储在进入点。当用 ps 命令察看系统中的进程信息时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个 进入点,然后将相关信息存储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。
子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。那么会不会因为父进程太忙来不及 wait 子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢?不会。因为UNIX提供了一种机制可以保证,只要父进程想知道子进程结束时的状态信息,就可以得到。这种机制就是:当子进程走完了自己的生命周期后,它会执行exit()系统调用,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出码exit code,退出状态the terminationstatus of the process,运行时间the amount of CPU time taken by the process等),这些数据会一直保留到系统将它传递给它的父进程为止,直到父进程通过wait / waitpid来取时才释放。 - 3
解决方法:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
执行wait()或waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生defunct进程。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler。在子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCLD, SIG_IGN)或signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号
(4)fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要自己做。
注意事项
遇到此类问题不要慌,大胆心细,按步骤来就可以搞定
如果你不懂的相关技术,建议找技术人员解决,否则会造成不必要的损失
原文网址:http://jingyan.baidu.com/article/a378c960648664b3282830cd.html
僵尸进程和孤儿进程:http://hi.baidu.com/zengzhaonong/item/95e225f99939906b3c14852d
转载于:https://www.cnblogs.com/heybob/p/4718975.html
【转】Linux的僵尸进程解决攻略相关推荐
- Linux的僵尸进程及其解决方法(转)
Linux的僵尸进程及其解决方法 摘要: Linux的僵尸进程及其解决方法 1. 产生原因: 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将 ...
- LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS) (转)
LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS) (转)[@more@]Linux 下播放 dvd 全攻略 推荐:bfreeboy 发表日期:2001年5 ...
- LINUX 下播放 DVD 全攻略 (关键字 DVD-ROM LiViD fifo OMS)
LINUX 下播放 DVD 全攻略 推荐:bfreeboy 发表日期:2001年5月23日 阅读次数:68 -------------------------------------------- ...
- win7下安装Linux实现双系统全攻略
win7下安装Linux实现双系统全攻略 听语音 http://jingyan.baidu.com/article/c275f6bacc3326e33c756743.html 分区http://jin ...
- linux 识别僵尸进程,Linux上寻找并杀死僵尸进程
转载: http://blog.csdn.net/shanzhizi/article/details/47320595 linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进 ...
- Linux CentOS7配置ip地址攻略
本文为joshua317原创文章,转载请注明:转载自joshua317博客 Linux CentOS7配置ip地址攻略 - joshua317的博客 一.背景 公司新来一台服务器,系统已经装好了,操作 ...
- Linux下Web服务器架设攻略
Linux下Web服务器架设攻略 [收藏此页] [打印] [推荐] [挑错] 作者:小云 2004-12-23 内容导航: 概述 [IT168 专稿]今天我们来看看如何将Web服务器架在Lin ...
- linux服务配置大全 fedora 8 ftp 百度文库,Linux下VSFTP配置全攻略
Linux下VSFTP配置全攻略 [日期:2007-10-05] 来源:Linux公社 作者:Linuxidc [字体:大 中 小] 4]如果要以系统中存在的普通用户登入FTP,也没有什么可以设置的, ...
- 侏罗纪世界手游显示无法登陆到服务器,《侏罗纪世界手游》不能玩 解决攻略...
<侏罗纪世界手游>是一款由由ludia研发的恐龙时代为背景的模拟策略经营手游,很多玩家在兴冲冲地下载完游戏之后却发现不能玩,那么这到底是什么原因呢?下面小编就为大家带来解决攻略! 解决攻略 ...
最新文章
- JavaScript 基础,登录验证
- php artisan常用方法
- VB读取INI配置文件各方资料整合
- Nginx、LVS及HAProxy负载均衡软件的优缺点详解
- UILabel上展示不同颜色的文字(NSAttributedString)
- 板子制作_工厂制作风管VS现场制作有什么区别?
- JS 实现 jQuery的$(function(){});
- 简约好看的域名售卖页html源码
- 使用C#和MSMQ开发消息处理程序
- MySQL 备份 nb3 和 psc的区别
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。...
- [20180812]四校联考
- android小小的开发细节
- ASRT语音识别asrserver http协议测试专用客户端
- 职称计算机考试题库破解版2017,2017职称计算机考试题库及答案
- 线性代数基础知识点回顾与总结(一):行列式与矩阵
- 交流电路计算方法:复阻抗和相量法
- 信也科技2021年Q3财报:科技助力小微迸发新活力 践行ESG实现可持续发展
- filter_input
- 第五章:MySQL主从复制
热门文章
- openstack上创建vm实例后,状态为ERROR问题解决
- 为什么NaN - NaN == 0.0与英特尔C ++编译器?
- 如何从JavaScript对象中删除键? [重复]
- 如何回滚特定的迁移?
- 为什么null为对象,并且null和undefined有什么区别?
- springmvc个人小结
- Win10启动项设置在哪里
- win11小键盘怎么设置 Windows11小键盘的设置方法
- (转)MTK VC模拟器使用技巧
- 计算机四级网络工程题库,2015计算机四级网络工程师模拟题库(三)附答案