如何安装信号处理程序名称sig_handler

时间:2017-04-14 10:14:47

标签: c linux ubuntu unix signals

嗨,我已经完成了这段代码,但有些东西需要添加之类的。

  1. 忽略信号SIGINT
  2. 将SIGINT的信号处理程序恢复为默认值
  3. 捕获信号SIGINT并打印出信号的数值
  4. 到目前为止,这是我的编码

          void sig_handler(int signo)
        {
        // body of signal handler
        }
    
        int main()
    {
        struct sigaction act;
        act.sa_flags = 0;
        act.sa_handler = sig_handler;
        sigfillset( & (act.sa_mask) );
    
    if (sigaction(sig, &act, NULL) != 0) 
        {
             perror("sigaction"); exit(1);
        }
    }
    

1 个答案:

答案 0 :(得分:0)

这样的事情会让你开始。

#include <stdio.h>
#include <signal.h>

void    handle_signal(int signum)
{
    printf("\nRecived signal: %d\n", signum);
    switch(signum)
    {
        case SIGINT:
            printf("I won't respond to ctrl-c!\n");

            //restore to default
            signal(SIGINT, SIG_DFL);
            break;
        case SIGWINCH:
            //windows size change
            break;
        case SIGCONT:
            //continue process 'fg' in terminal
            break;
        case SIGTSTP:
            //ctrl-z
            break;
        default:
            //others
            break;
    }
}

void        listen_to_signals(void)
{
    int     i;

    i = 0;
    while (i < 32)
    {
        if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD && i != SIGCONT &&
            i != SIGURG && i != SIGIO)
            signal(i, &handle_signal);
        i++;
    }
}

int     main()
{
    listen_to_signals();
    while(1)
    {}
}

请注意,我正在听取所有信号:有一些我无法听到的信号(比如杀人)。

注意:使用&#39; kill -9 pidof your_program&#39;阻止它

注意:第一次SIGINT将被忽略,但第二次,它会赢(因为我将其恢复为默认行为)