首页 > 系统服务 > 详细

Linux 僵尸进程 孤儿进程

时间:2014-05-28 01:02:14      阅读:504      评论:0      收藏:0      [点我收藏+]

今天有人问到了僵尸进程 和孤儿进程,以前遇到过,但是没有太注意,这里mark 一下

 

僵尸进程 :进程 fork 出来子进程,但是 父进程没有调用wait 或waitpid 获取子进程的状态信息,子进程的进程描述符任然保存在系统中

查找僵尸进程

ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]‘

 

孤儿进程 :父进程退出,子进程任然在继续,孤儿进程将被init( 1) 收养,并由Init完成对他们的信息采集

 

僵尸进程的危害:进程退出时候,内核将释放所有资源,包括打开的文件、占用的内存的时候有,但是任然会保留一定的信息

,知道父进程通过wait/waitpid 来取的时候才释放,如果父进程不钓鱼wait waitpid ,这些保留的信息就不会释放,其进程号就会被一直占用,系统进程号有限,如果大量产生僵尸进程,系统就不能产生新的进程。

孤儿进程是没有父进程的进程,init 会负责善后工作,无什么危害

 

子进程(init除外) 在exit 后,不会马上消失,而是成为zombie,等待父进程处理

eg: 僵尸进程

bubuko.com,布布扣
 1 #include<stdio.h>
 2 #include<unistd.h>
 3 #include<stdlib.h>
 4 #include<errno.h>
 5 
 6 
 7 int main()
 8 {
 9     pid_t pid = fork();
10     if( pid < 0 ) 
11     {   
12         printf("fork_error\n");
13         exit(1);
14     }   
15     else if ( pid == 0 ) 
16     {   
17         printf(" child \n");
18         exit(0);
19     }   
20 
21 
22     printf("father....\n");
23     sleep(2);
24     system("ps -o pid,ppid,state,tty,command");
25     printf("father exit....");
26     return 0;
27 }
bubuko.com,布布扣

  其运行结果

  bubuko.com,布布扣

  孤儿进程

  

bubuko.com,布布扣
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>


int main()
{
    pid_t pid = fork();
    if( pid < 0 ) 
    {   
        printf("fork_error\n");
        exit(1);
    }   
    else if ( pid == 0 ) 
    {   
        printf(" child \n");
        printf("pid: %d\tppid:%d\n",getpid(),getppid());
        printf("sleep ...");
        sleep(4);
        printf("pid: %d\tppid:%d\n",getpid(),getppid());
        printf("child exit ...");
        exit(0);
    }   


    printf("father....\n");
    printf("father exit....");
    return 0;
}
bubuko.com,布布扣

  运行结果:

  bubuko.com,布布扣 

 

Linux 僵尸进程 孤儿进程,布布扣,bubuko.com

Linux 僵尸进程 孤儿进程

原文:http://www.cnblogs.com/songbingyu/p/3753843.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!