zoukankan      html  css  js  c++  java
  • 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释放进程资源表。

  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9216000.html
Copyright © 2011-2022 走看看