zoukankan      html  css  js  c++  java
  • 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. ",i,getpid());
                sleep(3);
                printf("%dth child <%d> end   work. ",i,getpid());
                exit(0);
            }
         }
         //parent
         while(1)
         {
             getchar();
             printf("parent working.... ");
         }

         return 0;
    }

  • 相关阅读:
    区分nil Nil NULL和NSNill(Objective C语言)(转)
    iOS 中DLog 用法
    web开发中因为导包顺序不同而出错
    用java程序复制UTF-8文件后开头出现?号
    java使用dom4j解析xml
    Json的解析与封装
    java读取properties配置文件
    关于代码注释的一些问题
    当没有给字符串留''的位置的后果
    service()和doGet()和doPost()
  • 原文地址:https://www.cnblogs.com/edan/p/8933037.html
Copyright © 2011-2022 走看看