美文网首页
linux-信号处理函数-解除系统信号阻塞

linux-信号处理函数-解除系统信号阻塞

作者: 诸事圆成 | 来源:发表于2020-03-29 22:14 被阅读0次

下面是我写了个即使按了Ctrl C进程也不会退出的例子

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>


sigset_t prev_mask;

static char *SIG_NAME[] =
{"SIGHUP",
 "SIGINT",
 "SIGQUIT"
};

/* 设置收到Ctrol C 进程不退出*/
static void setUNBlock()
{
    sigset_t mask;
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);

    sigprocmask(SIG_BLOCK, &mask, &prev_mask);
}

/* 还原系统设置 */
static void restore_system_block(sigset_t *set)
{
   sigprocmask(SIG_SETMASK, set, NULL);
}

/* signal处理函数 */
static void signal_hander(int _N)
{
    printf("Caught signal: %s\n", SIG_NAME[_N - 1]);
    exit(EXIT_SUCCESS);
}


int main(int argc, char **argv)
{
    //注册收到Ctrl C的处理函数 signal_hander()
    if (signal(SIGINT, signal_hander) == SIG_ERR)
    {
        printf("signal_error\n");
        exit(EXIT_FAILURE);
    }
    
    setUNBlock();
    int i = 0;
    while(i < 10)
    {
        printf("process is sleep...\n");
        sleep(1);
        i++;
    }
    printf("_______________process is restored\n");
    restore_system_block(&prev_mask);
    
    while(1);

    return 0;
}

相关文章

  • linux-信号处理函数-解除系统信号阻塞

    下面是我写了个即使按了Ctrl C进程也不会退出的例子

  • 信号二

    信号的几种状态 抵达:表示一个信号到达,要处理的信号。阻塞:表示当信号到达时使信号阻塞,当解除阻塞时再处理信号,阻...

  • socket

    socket connect阻塞和非阻塞处理 定义信号处理函数

  • 信号打断read()函数、accept()函数

    一、信号打断read()函数 read()函数如果阻塞地读,很容易就会被信号打断如果被信号打断,返回的错误码err...

  • [c/c++] 7.signal函数

    函数signal UNIX系统信号机制最简单的接口是signal函数。 返回值:若成功,返回以前的信号处理配置;若...

  • iOS底层--GCD应用

    手动目录GCD简介信号量信号量的理解信号量的使用信号量的代码实操信号量阻塞哪里的任务?栅栏函数dispatch_b...

  • C/C++面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • 一些面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • 信号处理函数

    信号处理函数 sigaction的用法 int sigaction ( int signo, const stru...

  • 信号与系统

    信号与系统 whye 信号 信号的分类 确定信号与不确定信号 确定信号 可以用函数表示的信号 不确定信号 不能用确...

网友评论

      本文标题:linux-信号处理函数-解除系统信号阻塞

      本文链接:https://www.haomeiwen.com/subject/sgspuhtx.html