• 14僵尸进程方式3 4补充


    前面的进程控制2,介绍了僵尸进程,和解决方式4种中的两种。下面再补充两种。

    解决方式:

    3:忽略SIGCHLD信号

    父进程设置忽略 SIGCHLD信号,子进程结束自动释放进程表资源

    忽略SIGCHLD信号:

    signal(SIGCHLD, SIG_IGN)

    4:捕获SIGCHLD信号

    父进程捕获SIGCHLD信号,并在捕获函数代码中 执行wait()

    处理SIGCHLD信号:

    void pFun(int nSignal) 

    signal(SIGCHIL, pFun)

    僵尸进程:

    void testZomb()

    {

          pid_t pid=fork();

          if(pid==0)

          {

               printf("this is a child:%d ",getpid());

               _exit(0);

          }

          else

          {

               printf("this is a parent:%d ",getpid());

               while(1);

          }

    }

    rowe       3440   3110 92 23:04 pts/0    00:00:08 ./main

    rowe       3441   3440  0 23:04 pts/0    00:00:00 [main] <defunct>

    <defunct>说明就是僵尸进程,并且无法使用kill命令进行终止,也无法对其进行任何操作。

    忽略SIGCHLD信号方式:

    void testZomb()

    {

          pid_t pid=fork();

          if(pid==0)

          {

               printf("this is a child:%d ",getpid());

               _exit(0);

          }

          else

          {

               //父进程忽略SIGCHLD

               signal(SIGCHLD,SIG_IGN);

               printf("this is a parent:%d ",getpid());

               while(1);

          }

    }

    捕获SIGCHLD信号方式:

    void func(int sig)

    {

          printf("receive signal:%s[%d] ",strsignal(sig),sig);

          wait(NULL);

    }

    void testZomb()

    {

          pid_t pid=fork();

          if(pid==0)

          {

               printf("this is a child:%d ",getpid());

               _exit(0);

          }

          else

          {

               //父进程对SIGCHLD进行处理

               signal(SIGCHLD,func);

               printf("this is a parent:%d ",getpid());

               while(1);

          }

    }

    wait结束后,由init释放进程资源表。

  • 相关阅读:
    bzoj 2159 Crash 的文明世界
    bzoj 4241 历史研究
    数论大合集(柿子版)
    [IOI2005]mou
    CSP 2020 T3 函数调用
    线段树 --算法竞赛专题解析(24)
    树状数组 --算法竞赛专题解析(23)
    算法竞赛专题解析(22):数论--同余
    算法竞赛专题解析(21):数论--线性丢番图方程
    算法竞赛专题解析(20):数论--GCD和LCM
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9216000.html
Copyright © 2020-2023  润新知