• Linux 僵尸进程 孤儿进程


    今天有人问到了僵尸进程 和孤儿进程,以前遇到过,但是没有太注意,这里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: 僵尸进程

     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
    ");
    13         exit(1);
    14     }   
    15     else if ( pid == 0 ) 
    16     {   
    17         printf(" child 
    ");
    18         exit(0);
    19     }   
    20 
    21 
    22     printf("father....
    ");
    23     sleep(2);
    24     system("ps -o pid,ppid,state,tty,command");
    25     printf("father exit....");
    26     return 0;
    27 }

      其运行结果

      

      孤儿进程

      

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<errno.h>
    
    
    int main()
    {
        pid_t pid = fork();
        if( pid < 0 ) 
        {   
            printf("fork_error
    ");
            exit(1);
        }   
        else if ( pid == 0 ) 
        {   
            printf(" child 
    ");
            printf("pid: %d	ppid:%d
    ",getpid(),getppid());
            printf("sleep ...");
            sleep(4);
            printf("pid: %d	ppid:%d
    ",getpid(),getppid());
            printf("child exit ...");
            exit(0);
        }   
    
    
        printf("father....
    ");
        printf("father exit....");
        return 0;
    }

      运行结果:

       

  • 相关阅读:
    secureCRT 6.5 ssh登陆openeuler提示交换秘钥不支持
    ediary电子日记本-力荐
    centos8.4 iso下载地址
    Manjaro Cutefish 安装体验类似macos风格
    脚本启动第一行提示sh/bash找不到
    securecrt双击克隆会话
    开源的window/linux远程连接工具-mRemoeteNG
    securecrt设置日志缓存
    怎么实现通过扫描二维码进行登录
    使用link rel="shortcut icon"为网页标题加图标
  • 原文地址:https://www.cnblogs.com/songbingyu/p/3753843.html
Copyright © 2020-2023  润新知