Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?

如题 Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?

一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,他的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁)。在linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态信息供其他进程收集,除此之外,僵尸进程不再占有任何存储空间。他需要他的父进程来为他收尸,如果他的父进程没有安装SIGCHLD信号处理函数调用wait
或 waitpid()
等待子进程结束,有没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时候父进程结束了,那么init进程会自动接手这个子进程,为他收尸,他还是能被清除掉的。但是如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是系统中为什么有时候会有很多的僵尸进程。

避免zombie的方法

1)在svr4中,如果调用signal或是sigset将SIGCHLD的配置设置为忽略,则不会产生僵死子进程。另外,使用svr4版本sigaction,则可设置SA_NOCLDWAIT标志以避免子进程僵死。Linux中也可以使用这个,在一个程序开始调用这个函数signal(SIGCHLD,SIG_IGN);

2)调用fork两次

3)用waitpid等待子进程返回。

时间: 2024-10-14 00:18:38

Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?的相关文章

Linux 系统中僵尸进程

Linux 系统中僵尸进程 Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 僵尸进程如何产生的? 如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了.那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢? 一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的

Linux系统中查看进程和计划任务管理

? 各位小伙伴们大家好,本次给大家带来的是Linux操作系统中的进程和计划任务的管理,首先大家都知道程序是保存在外部存储介质(如硬盘.光盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序,在Linux系统中,每个程序启动后可以创建一个或多个进程.例如:提供Web服务的httpd程序当有大量用户同时访问Web页面时,httpd程序可能会创建多个进程来提供服务.那么接下来我将会从以下几点来告诉大家在Linux的CentOS 7系统中是如何查看进程信息和控制进

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

linux系统寻找僵尸进程

1. 用top命令来查看服务器当前是否有僵尸进程. 2. 用ps和grep命令寻找僵尸进程 $ ps -A -ostat, pid, ppid, cmd | grep -e '^[Zz]' 命令解释: -A :列出所有进程 -o :自定义输出字段,这条命令设定显示字段为stat(状态),pid(进程id),ppid(父进程id),cmd(命令) 状态为z或者Z的进程为僵尸进程,所以用grep抓取stat状态为zZ进程 3. kill命令杀死僵尸进程 $ kill 2148 如果kill 2148

解决linux 系统中Mysql 进程占用CPU 300%故障

今日接到同事的电话,说微信公共帐号中的游戏无法登陆,用户不能玩了,麻烦尽快解决. 1.登陆IDC机房查看服务器流量图,流量正常,排除故障与流量无关. 2.登陆微信公共帐号中的游戏所在服务器发现系统互载过高,mysql进程CPU使用率超过300%. 为了快速解决问题直接重启mysql服务后,再查sysql进程CPU使用率依旧高居不下.故障还没有解决,继续寻找原因. 3.登陆mysql数据库,执行show processlist;查看当前正在执行的sql语句,发现几个表出现"sending data

一起聊聊 Linux 系统中的僵尸进程

Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.僵尸进程如何产生的?如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了.那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号.进程的退出状态.进程运行的

浅谈Linux系统中如何查看进程 ——ps,pstree,top,w,全解

进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源.一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝. 1,ps命令 作用:ps命令主要用于查看系统中进程的状态. 用法:ps [选项] 主要选项如下: -e 显示所有进程 -a 跟终端无关的进程 (BSD风格,不加横杆) -x 跟终端有关的进程 -u 发起者 -F 额外信息 -f 显示完整信息 -j 以作业的方式显示进程 -H 显示进程的关系 -o 自定义显示哪些字段 单一

Linux系统中进程的创建

1.Linux中的进程 进程是程序执行的一个实例,也是系统资源调度的最小单位.如果同一个程序被多个用户同时运行,那么这个程序就有多个相对独立的进程,与此同时他们又共享相同的执行代码,在Linux系统中进程的概念类似于任务或者线程(task & threads). 进程是一个程序运行时候的一个实例实际上说的是它就是一个可以充分描述程序以达到了其可以运行状态的的一个数据和代码集合.一个进程会被产生并会复制出自己的子代,类似细胞分裂一样.从系统的角度来看进程的任务实际上就是担当承载系统资源的单位,系统

linux 如何清理僵尸进程

今天在维护服务器的时候,发现有5个nova-novncproxy的僵尸进程. 26327 ?        S      0:05  \_ /usr/bin/python /usr/bin/nova-novncproxy --config-file=/etc/nova/nova.conf 4765 ?        Z      0:00      \_ [nova-novncproxy] <defunct> 4766 ?        Z      0:00      \_ [nova-no