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释放进程资源表。

  • 相关阅读:
    Typekit在线字库及使用方法
    SVG基础图形和D3.js
    CSS3 媒体查询@media 查询(响应式布局)
    Bootstrap 栅格系统(布局)
    CSS——图片替换方法:Fahrner图片替换法(FIR)
    CSS sprites(css 精灵):将小图标整合到一张图片上
    [html]点击button后画面被刷新原因:未设置type="button"
    [java]No qualifying bean of type 解决方法
    [eclipse]eclipse设置条件断点Breakpoint Properties
    Intent的setFlag和addFlag有什么区别?
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9216000.html
Copyright © 2011-2022 走看看