c - Linux : Ignoring a signal inside a signal handler, 忽略所有此类连续信号

标签 c linux signal-handling

我有一个简单的程序来演示 Linux 的 C 信号处理。我只是为了实验而将其复杂化..

void sigquit(int signo)
{
    printf("Recieved signo : %d\n",signo);
    signal(SIGQUIT,SIG_IGN);
}

int main()
{

    /* register the signal handler */
    if(signal(SIGQUIT,sigquit) == SIG_ERR)
    {
        perror("Error handling SIGQUIT signal");
        exit(1);
    }
    for(;;);
    return 0;
}

我得到输出:

^\Recieved signo : 3
^\^\^\^\^\^\^\

而我期待的是这样的:

    ^\Recieved signo : 3
    ^\Recieved signo : 3
    ^\Recieved signo : 3
    ^\Recieved signo : 3

为什么只在第一次调用我的处理程序而不是进一步调用。我预计信号首先到达主线程,然后传递给处理程序。

最佳答案

signal(SIGQUIT,SIG_IGN);

从信号处理程序中,您告诉程序忽略该信号发生的任何进一步情况。因此,当您再次发送信号时,它会被忽略,就像您告诉它的那样。

关于c - Linux : Ignoring a signal inside a signal handler, 忽略所有此类连续信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510219/

相关文章:

c - sigaction 仅捕获信号一次

c - setvbuf 的内存副作用

c++ - 在 C/C++ 或任何其他此类语言中将 & 符号应用于变量或数据类型时返回什么类型的地址?

linux - 使用 Dockerfile 设置多行环境变量

Linux 为什么我不能通过管道找到结果到 rm?

linux - cd//是什么意思(将目录更改为//)

iphone - 如何正确处理异常情况(信号?)

c - 实现 isalpha(const char *s) - 如何改进此功能?

c - 如何使 C 函数中的数组成为全局数组?

c++ - 有没有办法阻止用户注册/使用他自己的信号处理程序并始终使用特定的处理程序?