sigsuspend 用于等待信号处理程序设置全局变量

原创 2012年03月26日 09:55:38
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>

extern int errno;

volatile sig_atomic_t quitflag;

static void sig_int(int signo)
{
    if(signo == SIGINT)
    {   
        printf("INTERRUPT!\n");
    }   
    else if(signo == SIGQUIT)
    {   
        quitflag = 1;
    }   
}

int main(int argc, char **argv)
{
    sigset_t newmask, oldmask, zeromask;
    
    if(signal(SIGINT, sig_int) == SIG_ERR)
    {   
        printf("SIGINT: %s\n", strerror(errno));
        exit(-1);
    }   
    
    if(signal(SIGQUIT, sig_int) == SIG_ERR)
    {   
        printf("SIGQUIT: %s\n", strerror(errno));
        exit(-2);
    }   

    sigemptyset(&newmask);
    sigemptyset(&zeromask);
    sigemptyset(&oldmask);
    sigaddset(&newmask, SIGQUIT);

    if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
    {
        printf("sigprocmask(SIG_BLOCK): %s\n", strerror(errno));
        exit(-3);
    }

    while(quitflag == 0)
    {
        sigsuspend(&zeromask);
    }

    if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
    {
        printf("sigprocmask(SIG_SETMASK): %s\n", strerror(errno));
        exit(-4);
    }
    exit(0);
}

linux 信号处理流程

对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生信号在进程中注册信号在进程中的注销信号处理函数执行 1    信号诞生     信号...
  • my_aoong
  • my_aoong
  • 2015年12月05日 00:48
  • 578

linux signal信号处理过程与机制--完全实例讲解

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。  信号机制是进程之间相互传递消息的一种方法...
  • lee244868149
  • lee244868149
  • 2014年08月20日 17:08
  • 2532

Linux信号处理

由于在下能力相当有限,有不当之处,还望大家批评指正^_^ 一、 信号概念 信号(signal)是软中断。信号提供了一种处理异步事件的方式。当各种各样的事件发生时,程...
  • crazycoder8848
  • crazycoder8848
  • 2015年07月04日 14:09
  • 1275

Linux 信号signal处理机制

http://oilbeater.com/2012/05/09/linux-signal/ linux 信号处理机制简介 鉴于后面把进程的形象给彻底毁掉了,我提前声明一下,进程是有尊严的有...
  • chinaclock
  • chinaclock
  • 2015年09月28日 10:26
  • 1811

多线程信号总结

linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难...
  • u012007928
  • u012007928
  • 2015年01月30日 15:56
  • 1043

Linux异步信号处理函数引发的死锁及解决方法

异步信号处理方式使用不当会发生死锁。异步信号处理函数不推荐做太多工作,如果调用函数需要是reentrant。reentrant可重新进入的,可以理解为一次调用发生后,不会对该函数的再次调用发生任何影响...
  • u014070695
  • u014070695
  • 2016年03月05日 17:09
  • 1786

Linux程序设计学习笔记——异步信号处理机制

Linux常见信号与处理
  • hu1020935219
  • hu1020935219
  • 2014年08月09日 11:51
  • 2019

Linux 信号signal处理机制

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。  信号机制是进程之间相互传递消息的一种方法...
  • heyustudent
  • heyustudent
  • 2013年12月23日 16:23
  • 3029

Linux中的信号处理函数

信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也称作软中断。 从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。  1. 基本概念  软中...
  • s651665496
  • s651665496
  • 2016年05月23日 09:54
  • 649

Linux信号处理函数

转自:http://blog.csdn.net/sddzycnqjn/article/details/7285760 1. 信号概念  信号是进程在运行过程中,由自身产生或由进...
  • yaoxingshuai
  • yaoxingshuai
  • 2016年04月22日 17:18
  • 1702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sigsuspend 用于等待信号处理程序设置全局变量
举报原因:
原因补充:

(最多只允许输入30个字)