码迷,mamicode.com
首页 > 其他好文 > 详细

signal之——异步回收机制2

时间:2018-04-24 20:27:00      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:get   ret   sys   return   def   #define   处理   int   回收   

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

代码如下:

//如果无需关心进程结束状态 可以设置子进程结束时不产生僵尸进程有内核值接回收
#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

标签:get   ret   sys   return   def   #define   处理   int   回收   

原文地址:https://www.cnblogs.com/edan/p/8933037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!