概述编辑

sigaction(查询或设置信号处理方式)
相关函数 signal,sigprocmask() ,sigpendingsigsuspendsigemptyset
表头文件 #include<signal.h>
定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
函数说明 sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
如参数结构sigaction定义如下
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
}
信号处理函数可以采用void (*sa_handler)(int)或void (*sa_sigaction)(int, siginfo_t *, void *)。到底采用哪个要看sa_flags中是否设置了SA_SIGINFO位,如果设置了就采用void (*sa_sigaction)(int, siginfo_t *, void *),此时可以向处理函数发送附加信息;默认情况下采用void (*sa_handler)(int),此时只能向处理函数发送信号的数值。
sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。
sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号集搁置。
sa_restorer 此参数没有使用。
sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。
sa_flags还可以设置其他标志:
SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL
SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用
SA_NODEFER :一般情况下, 当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号[1] 
sigaction

2示例编辑

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
static void int_hander(int s)
{
printf("Catch a signal sigint\n");
}
int
main(void)
{
int i;
struct sigaction act, oact;
act. sa_handler = int_hander;
sigemptyset(&act. sa_mask); //清空此信号集
act. sa_flags = 0;
sigaction(SIGINT, &act, &oact);
//signal(SIGINT, SIG_IGN);
while(1){
for(i=0; i<5; i++){
write(1, ".", 1);
sleep(1);
}
write(1, "\n", 1);
}
sigaction(SIGINT, &oact, NULL); //恢复成原始状态
return 0;
}

最新文章

  1. jQuery介绍 DOM对象和jQuery对象的转换与区别
  2. 不是SELECTed表达式
  3. Simple XML
  4. SQL日期操作及只获取日期的方法
  5. android开发者博客二月Android Studio2.0测试
  6. Topcoder 好题推荐
  7. (转) Special members
  8. android:padding和android:margin的区别
  9. MySql数据库学习--存储过程(1)
  10. openSuse使用技巧
  11. 老李分享:robotium3.6与4.0 later 的区别 2
  12. CSS display和visibility的用法和区别
  13. IP报文分片
  14. Java 中实现方法重试的一种机制
  15. .NET之RabbitMQ学习笔记(一)-应用场景
  16. TP5 常用-方法技巧
  17. MySQL正则表达式初步
  18. C#获取本地磁盘信息【转载】
  19. A simple problem(湘大邀请赛)
  20. Ubuntu16.04之Solr7.7.1环境搭建

热门文章

  1. 左移运算符&lt;&lt;
  2. Django学习笔记(五)—— 表单
  3. LSPCI具体解释分析
  4. gzip优化网络传输量提高传输效率[转]
  5. 工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat
  6. RESTful Web Services: A Tutorial--reference
  7. java/php/c#版rsa签名以及java验签实现--转
  8. 再探Java基础——String.format(String format, Object… args)的使用
  9. Android 从清单配置文件元数据中获取值
  10. CSS 命名规则