栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux 孤儿进程和僵尸进程

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux 孤儿进程和僵尸进程

目录
  • 回顾
  • 一 孤儿进程
  • 1 孤儿进程代码实现 和 查看
  • 二 僵尸进程
  • 1 僵尸进程代码实现和查看

回顾
上一节说了 当 调用 execl execlp 函数 时 不用拷贝多余的空间 就可以实现多一个命令(或是多多个命令) 相当于运行一个代码 可以最多实现n个功能 具体还要根据 execl  execlp的设定 
1 execl  函数可以是有c文件的参数 
2 但是 execlp 只能有固定命令参数和命令名字 不能是执行创建的 (hello.c )
比如 ps aux  ls -l 就是固定命令参数和命令名字
ls ,ps 就是命令名字  -l aux 就是命令参数
继续往下学
一 孤儿进程

孤儿进程就是 被父进程 抛弃了子进程就出门了 这是子进程就是孤儿进程 最后会人收养它 那就是
养父进程 并且类型就是int的 就是int 进程
必须是父进程才能抛弃子进程 也就是 释放子进程控制块 的意思
父进程抛弃完之后 空间就更多了 也就是进程结束之后 能够释放用户空间的意思
1 孤儿进程代码实现 和 查看
#include
#include
#include
#include


int main()
{
     pid_t a;

     a=fork();

     if(a>0)
     {   
             printf("father pid is %dn",getpid());    
     }
     else if(a==0)
     { 
               sleep(2);
            printf("child pid is %d ppid is %d n",getpid(),getppid());
      
     }

     return 0;
}


因为父进程是从main开始执行的 所以到了子进程的if判断while sleep(2); 睡眠 2ms
相当于挂起了 退出了 

为什么父进程对应不上呢
先查看他的 pid  对应了什么任务

systemd 是int类型的 也就是养父进程  
养父进程收养了子进程
二 僵尸进程

父进程一直在工作 却不知道子进程的信息 这时子进程就变僵尸进程了 
 退出了工作 父进程只能收僵尸的信息了  
1 僵尸进程代码实现和查看
#include
#include
#include
#include


int main()
{
     pid_t a;

     a=fork();

     if(a>0)
     {
            while(1){          
                 printf("father pid is %dn",getpid());
                 sleep(2);           
            }          
     }
     else if(a==0)
     {   
    printf("child pid is %d ppid is %d n",getpid(),getppid());     
     }

     return 0;
}

defunct :僵尸进程 和对应的二进制文件
如果杀死 会不会存在
注意不是杀死子进程 而是杀死了父进程 才能让僵尸进程不存在  
因为父进程是主导的 子进程是被动的

其实产生僵尸进程 杀死不杀死 都是一个没有生命周期的进程   
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号