linux僵尸进程

原创 2016年09月18日 16:38:10

定义

僵尸进程是指子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵尸状态等待其父进程为其收尸,这个状态下的子进程就是僵尸进程。

实例

#include<stdio.h>
#include<stdlib.h>
#include<error.h>
int main(int argc,char *argv[]){    
    int pid,i;
    pid = fork();
    switch(pid){
        case 0: //子进程
            printf("child start\n");
            //睡眠10s
            sleep(10);
            printf("child end\n");
            break;
        case -1: 
            perror("fork failed\n");
            break;
        default://父进程
            printf("parent over\n");    
    }   
    return 0;   
}

这里写图片描述
这里写图片描述
从上面的运行结果可以看出,父进程在子进程运行未结束前退出,导致子进程被int进程接管(此时父进程id变更为1)。待子进程运行接触后,子进程资源回被回收。

大约10秒后子进程被系统回收了,如下图:
这里写图片描述

解决方法

针对上面的情况,c语言提供了wait和waitpid方法,用于捕获子进程退出的信号,从而能有效地避免子进程出现“僵尸”状态的现象。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<error.h>
int main(int argc,char *argv[]){
    int pid,i;
    pid = fork();
    switch(pid){
        case 0:
            printf("child start\n");
            sleep(10);
            printf("child end\n");
            break;

        case -1: 
            perror("fork failed\n");
            break;

        default:
            waitpid(pid, NULL, 0); 
            printf("parent over\n");    
    }   
    return 0;   
}

运行结果如下:
这里写图片描述
这里写图片描述

总结

在使用fork()创建子进程时,应尽量避免出现”僵尸进程”的情况。虽然子进程处于”僵尸”状态时,系统会将子进程交给init进程接管, 但此时子进程的占用资源并未得到释放。

版权声明:本文为博主原创文章,未经博主允许不得转载。

linux上寻找并杀死僵尸进程

linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进程的方法 首先,我们可以用top命令来查看服务器当前是否有僵尸进程,在下图中可以看到僵尸进程数的提示,如果数字大于...
  • shanzhizi
  • shanzhizi
  • 2015年08月06日 17:50
  • 7616

linux下的僵尸进程产生原因和解决方法(含具体代码)

在linux系统中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表中仍占了一个位置。由于进程表的容量...
  • LEON1741
  • LEON1741
  • 2017年09月30日 14:14
  • 663

【Linux】僵尸进程的检测,清理和避免

一.僵尸进程的产生一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程在终止时,回收所有内核分配给它的内存、关闭它...
  • jiange_zh
  • jiange_zh
  • 2015年12月19日 10:27
  • 2934

Linux下如何防止僵尸进程的出现

今天碰到一个老问题,就是防止僵尸进程的出现,于是又在网上学习了一遍,写到这里,防止以后不再有一个地方重新学习,:)一、什么是僵尸进程这个首先要了解一下linux下的进程在结束的时候会做什么事情。lin...
  • u011801189
  • u011801189
  • 2016年04月29日 18:09
  • 1318

Linux 下僵尸进程的清理方法

平时很多时候发现定时检测的脚本kill 之后,该进程会僵死在里面,无法清理。可以参考下面的方法清理:有以下环境的进程:#ps aux |grep monitorast.plroot      3962...
  • radkitty
  • radkitty
  • 2010年03月29日 11:01
  • 6174

Linux的僵尸进程产生原因及解决方法

来源:http://www.blogdaren.com/post-882.html 1. 产生原因:     在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait ...
  • gb4215287
  • gb4215287
  • 2016年07月08日 00:02
  • 3469

Linux环境下如何杀死僵尸进程

我们在使用top命令查看主机性能的的时候会在第二行会查看到有zombie关键字,此关键字代表僵尸进程的意思。僵尸进程:在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / wa...
  • lufeisan
  • lufeisan
  • 2016年10月30日 16:38
  • 588

linux下避免僵尸进程的几种方法

linux下我们可以调用fork函数创建子进程,创建的子进程将会得到父进程的数据空间、堆、栈......副本(采用写时复制机制),子进程将会继承父进程的信号掩码、信号处理方式、当前工作目录、会话id、...
  • ComingFlying
  • ComingFlying
  • 2017年08月05日 14:52
  • 314

在Linux中,如何找到并杀掉僵尸进程?

如果你经常使用 Linux,你应该遇到这个术语“僵尸进程Zombie Processes”。 那么什么是僵尸进程? 它们是怎么产生的? 它们是否对系统有害? 我要怎样杀掉这些进程? 下面将会回答这些问...
  • DP29syM41zyGndVF
  • DP29syM41zyGndVF
  • 2017年12月18日 00:00
  • 265

linux 如何清理僵尸进程

转载自:http://www.cnblogs.com/yuxc/archive/2012/11/04/2753391.html 今天在维护服务器的时候,发现有5个nova-novnc...
  • xiong_mao_1
  • xiong_mao_1
  • 2014年01月08日 10:25
  • 1128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux僵尸进程
举报原因:
原因补充:

(最多只允许输入30个字)