菜鸟笔记
提升您的技术认知

linux 孤儿进程和僵尸进程-ag真人游戏

孤儿进程就是 被父进程 抛弃了子进程就出门了 这是子进程就是孤儿进程 最后会人收养它 那就是
养父进程 并且类型就是int的 就是int 进程
必须是父进程才能抛弃子进程 也就是 释放子进程控制块 的意思
父进程抛弃完之后 空间就更多了 也就是进程结束之后 能够释放用户空间的意思
#include
#include
#include
#include
int main()
{
  
     pid_t a;
     a=fork();
     if(a>0)
     {
     
             printf("father pid is %d\n",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
相当于挂起了 退出了 
其实 father pid 是main进程的身份 
child ppid 才是真实的父进程的身份
所以查父进程变化 信息 是  1 1 0 9 6 5
指令 ps aux | grep 1 1 0 9 6 5
为什么父进程对应不上呢
先查看他的 pid  对应了什么任务
systemd 是int类型的 也就是养父进程  
养父进程收养了子进程
父进程一直在工作 却不知道子进程的信息 这时子进程就变僵尸进程了 
 退出了工作 父进程只能收僵尸的信息了  
#include
#include
#include
#include
int main()
{
  
     pid_t a;
     a=fork();
     if(a>0)
     {
  
            while(1){
            
                 printf("father pid is %d\n",getpid());
                 sleep(2);           
            }          
     }
     else if(a==0)
     {
     
    printf("child pid is %d ppid is %d \n",getpid(),getppid());     
     }
     return 0;
}
defunct :僵尸进程 和对应的二进制文件
如果杀死 会不会存在
注意不是杀死子进程 而是杀死了父进程 才能让僵尸进程不存在  
因为父进程是主导的 子进程是被动的
其实产生僵尸进程 杀死不杀死 都是一个没有生命周期的进程   
网站地图