Chinaunix

标题: linux 僵死进程疑惑 [打印本页]

作者: 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
谢谢,受教了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2