Linux:忽略信号处理程序内的信号,忽略所有这些连续信号

时间:2016-05-29 12:59:58

标签: c linux signal-handling

我有一个简单的程序来演示C for Linux中的信号处理。我只是把它复杂化进行实验..

<template name="monitoring">
  {{#each houses}}
    <div class="card red">
      SHOW STUFF ABOUT HOUSE
    </div>
    {{#each neighbours}}
      <div class="card blue">
        SHOW STUFF ABOUT NEIGHBOURS OF THE SPECIFIC HOUSE
      </div>
    {{/each}}
  {{/each}}
</template>

我收到了输出:

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
^\^\^\^\^\^\^\

为什么只有第一次调用我的处理程序而不是进一步调用。我希望信号首先进入主线程,然后传递给处理程序。

1 个答案:

答案 0 :(得分:3)

  

信号(SIGQUIT,SIG_IGN);

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