Unix/Linux僵尸进程
1. 僵尸进程的产生:
一个进程调用exit命令结束自己生命的时候,其实它并没有真正的被销毁,而是留下一个称为“僵尸进程”的数据结构。这时它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置(它的内核栈还驻留在内存中),记载该进程的退出状态等有用的信息供其它进程收集。进程的状态变成EXIT_ZOMBIE,并且向父进程发送SIGCHLD信号,Linux默认是忽略该信号的,父进程可以显示安装该信号,在信号处理函数中调用wait或waitpid函数等待子进程结束并将其彻底清除。如果父进程没有这么做的话,子进程就沦为僵尸进程了。但是在父进程死掉后,它的所有进程都会过继给init进程,init进程会周期性的去调用wait系统调用来清除它的僵尸孩子。
2. 僵尸进程的危害:
少数的僵尸进程并不会对系统的性能有什么影响,但是由于Linux系统对运行的进程数量是有限制的,所以如果产生的僵尸进程过多,占用了可用的进程号,这将会导致新的进程无法生成。
3. 僵尸进程的避免:
(1)创建进程的时候调用两次fork,而且使紧跟的子进程直接退出,这样孙子进程成为孤
儿进程,init进程将负责清除这个孤儿进程。
(2)在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN,这样内核在子进程结束
时不会产生僵尸进程。在SVR4中,如果调用signal或sigset将SIGCHLD的配置设置为
忽略,也不会产生僵尸进程。
(3)调用wait或waitpid等待子进程结束,收集僵尸进程留下的信息,同时使僵尸进程彻
底消失。
注:不能使用 kill 后接 SIGKILL 信号这样的命令像杀死普通进程一样杀死僵尸进程,因为僵尸进程是已经死掉的进程,它不能再接收任何信号。
Unix/Linux僵尸进程的更多相关文章
- Linux 僵尸进程查杀
僵尸进程概念 僵尸进程(Zombie process)通俗来说指那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 书面形式一点:一个进程结束了,但是他的父进程没有等待(调用wait ...
- linux僵尸进程
什么是僵尸进程? 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子 ...
- 转载 linux 僵尸进程,讲的很透彻
僵尸进程的产生和避免,以及wait,waitpid的使用 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitp ...
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵 ...
- Linux 僵尸进程
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...
- Linux 僵尸进程如何处理
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...
- Unix/Linux获取进程的详细信息
Linux的进程的信息都记录在/proc/<pid>/下面,其实常用的ps.top命令也是从这里读取信息的.常用的信息有: cmd(命令).cmdline(完整的命令行参数).envrio ...
- 查看linux僵尸进程
top ps -A -o stat,ppid,pid,cmd | grep -e '^[zZ]' kill -HUP 进程号
- linux 僵尸进程查看方式
ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' # 结果 Z 169925 49893 [sw] <defunct> Z 169925 120690 ...
随机推荐
- sublime text3 好用的插件!!!
1.首先,你要保证sublime有Package Control,所以,如果没有,那么将Ctrl+`打开sublime控制台,将下列代码复制进去! import urllib.request,os; ...
- eclipse中svn插件在线安装方式
SVN插件地址:http://subclipse.tigris.org/update_1.8.x 第一步:eclipse>Help菜单>Install New Software- 第二步: ...
- thymeleaf模板引擎调用java类中的方法(附源码)
前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...
- 【Python学习笔记之一】Python关键字及其总结
前言 最近在学习Java Sockst的时候遇到了一些麻烦事,我觉得我很有必要重新研究学习Python这种脚本语言,参考大神的经验,淘到了一本学习Python的好书<"笨方法" ...
- bzoj 3212 Pku3468 A Simple Problem with Integers
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Description You ...
- 【京东账户】——Mysql/PHP/Ajax爬坑之购物车列表显示
一.引言 做京东账户项目中的购物车模块,功能之二是购物车列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.小功能-点击“去购物车结算” 小坑:Ajax动态生成的不能直接绑定,因 ...
- Spark官方1 ---------Spark SQL和DataFrame指南(1.5.0)
概述 Spark SQL是用于结构化数据处理的Spark模块.它提供了一个称为DataFrames的编程抽象,也可以作为分布式SQL查询引擎. Spark SQL也可用于从现有的Hive安装中读取数据 ...
- Dubbo分布式服务子系统的划分
一.划分子系统的策略 按照系统的业务模块的独立性划分 二.划分时服务子系统的数量的控制 过多:可能划分过细,破坏业务子系统的独立性,部署维护工作量大,独立进程占用内存多 过少:没能很好的解耦,开发维护 ...
- Detect Capital
Given a word, you need to judge whether the usage of capitals in it is right or not. We define the u ...
- windows 2008 R2 断电重启进入修复模式
windows 2008 R2 意外断电重启进入修复模式 现在出现一个问题,就是当机房停电的时候,计算机自动进入到修复模式,当人不在机房的时候,容易造成服务器无法访问,我相信正常启动应该没什么问题吧, ...