tianhailong 发表于 2020-03-15 23:27

linux 僵死进程疑惑

本帖最后由 tianhailong 于 2020-03-15 23:34 编辑

Linux中可以通过 signal(SIGCHLD, SIG_IGN); 来避免僵死进程
/**********************/
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int main() {
      signal(SIGCHLD, SIG_IGN);
      int pid = fork();
      if (pid == 0) {
                int i = 0;
                while (i < 5) {
                        ++i;
                }
      }
      else if (pid > 0) {
                while (1)
                        sleep(1);
      }
      else{
                printf("the error \n");
      }
      return 0;
}

/********************/

有点疑惑,SIGCHLD 信号默认就是忽略,那么有没有 signal(SIGCHLD, SIG_IGN) 这句应该没有区别,因为SIGCHLD 信号本来的处理方式就是忽略,但是没有 signal(SIGCHLD, SIG_IGN)就会产生僵死进程,很疑惑,希望大家帮忙答疑解惑哈

qwsxcd 发表于 2020-03-28 01:33

0x012ff54a 发表于 2020-06-11 15:53

回复 1# tianhailong

默认操作不是简简单单的忽略和主动设置忽略是不一样的操作。
默认操作是:
1. 忽略信号;
2. 终止程序。

tianhailong 发表于 2021-10-11 15:58

谢谢,受教了
页: [1]
查看完整版本: linux 僵死进程疑惑