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

标签 c linux ubuntu unix signals

您好,我已经完成了这段代码,但是我还需要添加一些东西,例如。

  1. 忽略SIGINT信号
  2. 将 SIGINT 的信号处理程序恢复为默认值
  3. 捕捉信号SIGINT并打印出信号的数值

到目前为止这是我的编码

      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);
    }
}

最佳答案

像这样的事情会让你开始。

#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)
    {}
}

请注意,我正在收听我能听到的所有信号:有些信号我听不到(比如杀戮)。

注意:使用'kill -9 pidof your_program'来停止它

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

关于c - 如何安装信号处理程序名称 sig_handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409547/

相关文章:

c - 减去两个字符指针

c - 如何释放C中列表列表中的节点? (游戏)

python-3.x - 在 ubuntu 上的 python3 中运行子进程(bash 脚本)

ubuntu - ipython 笔记本升级到 Ubuntu 15.04 后停止工作

c - 如何递归地遍历文件夹并计算总文件大小

c - 链表-1 将节点添加到前面

linux - Crunch 生成特定字典

python - 从一堆 SQL 语句中解析表名

regex - 如何在 vim 中使用正则表达式打开编译后的 pdf

c++ - 如何将 Allegro 库与 Ubuntu Allegro 应用程序捆绑在一起?