【Linux】孤儿进程&僵尸进程

 

孤儿进程

  父进程先死,子进程托孤给一号进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(void)
{
    pid_t pid;
    
    pid = fork();
    
    if(-1 == pid)
    {
        return 0;
    }
    if(0 == pid)
    {
        sleep(100);
    }
    if(pid > 0)
    {
        ;
    }
    return 0;
}

 

僵死进程

  子进程先死,父进程还没有来得及收尸

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(void)
{
    pid_t pid;
    
    pid = fork();
    
    if(-1 == pid)
    {
        return 0;
    }
    if(0 == pid)
    {
        
    }
    if(pid > 0)
    {
        sleep(100);
    }
    return 0;
}

 

避免僵死进程

  创建子进程的时候可以不管子进程,让Linux内核去管

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>


int main(void)
{
    pid_t pid;
    
    pid = fork();
    
    // 通过信号注册函数,忽略子进程死的信号
    signal(SIGCHLD, SIG_IGN);
    
    if(-1 == pid)
    {
        return 0;
    }
    if(0 == pid)
    {
        
    }
    if(pid > 0)
    {
        sleep(100);
    }
    return 0;
}

 

当父子进程共享文件描述符情况

   两个fd指向同一块内存

    因为两个进程共享了文件指针偏移量,所以都能向文件中写数据

 

 

信号:异步处理事件,是一种机制

  我们的程序在顺序执行的同时,能支持异步的调用信号处理函数

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。