signal之——异步回收机制2

Posted 孤~狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了signal之——异步回收机制2相关的知识,希望对你有一定的参考价值。

前言:上一篇的处理方法可以解决所有回收问题,但是如果我们不考虑子进程的返回状态,那么可以使内核来进行对子进程的回收

代码如下:

//如果无需关心进程结束状态 可以设置子进程结束时不产生僵尸进程有内核值接回收
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

#define     NR         40


int main(void)
{
     pid_t pid;

#if 0
     //子进程结束或停止 或者从停止到继续 发生SIGCHLD信号
     //某些平台将SIGCHLD信号设置忽略行为 则不产生僵尸进程
     if(signal(SIGCHLD,SIG_IGN)==SIG_ERR)
     {
         perror("signal");
         return 2;
     }
#else
     struct sigaction  ac={.sa_handler=SIG_IGN};//忽略信号
     sigemptyset(&ac.sa_mask);//不期望屏蔽其它信号
     ac.sa_flags=SA_NOCLDWAIT;//不产生僵尸进程
     sigaction(SIGCHLD,&ac,NULL);
#endif //

     int i;
     for(i=0;i<NR;i++)
     {
        pid=fork();
        if(pid==-1)   return 1;//error
        else if(pid==0)//child
        {
            printf("%dth child <%d> start work.\n",i,getpid());
            sleep(3);
            printf("%dth child <%d> end   work.\n",i,getpid());
            exit(0);
        }
     }
     //parent
     while(1)
     {
         getchar();
         printf("parent working....\n");
     }

     return 0;
}

以上是关于signal之——异步回收机制2的主要内容,如果未能解决你的问题,请参考以下文章

GUAVA本地缓存01_概述优缺点创建方式回收机制监听器统计异步锁定

信号(signal)

驱动对应用的异步通知机制

异步机制

linux之信号处理函数signal和sigaction

Python之垃圾回收机制与用户交互