sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。

他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口)

给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数oldact

int sigaction(int signo,const struct sigaction *restrict act,

struct sigaction *restrict oact);

结构sigaction定义如下:

struct sigaction{

void (*sa_handler)(int);

sigset_t sa_mask;

int sa_flag;

void (*sa_sigaction)(int,siginfo_t *,void *);

};

sa_handler字段包含一个信号捕捉函数的地址

sa_mask字段说明了一个信号集,在调用该信号捕捉函数之前,这一信号集要加进进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字复位为原先值。

sa_flag是一个选项,主要理解两个

SA_INTERRUPT 由此信号中断的系统调用不会自动重启

SA_RESTART 由此信号中断的系统调用会自动重启

SA_SIGINFO 提供附加信息,一个指向siginfo结构的指针以及一个指向进程上下文标识符的指针

最后一个参数是一个替代的信号处理程序,当设置SA_SIGINFO时才会用他。

例子:

#include #include #include void show_handler(int sig)

{

printf("I got signal %d\n", sig);

int i;

for(i = 0; i < 5; i++) {

printf("i = %d\n", i);

sleep(1);

}

}

int main(void)

{

int i = 0;

struct sigaction act, oldact;

act.sa_handler = show_handler;

sigaddset(&act.sa_mask, SIGQUIT); //见注(1)

act.sa_flags = SA_RESETHAND | SA_NODEFER;//见注(2)    //act.sa_flags = 0;//见注(3)

sigaction(SIGINT, &act, &oldact);

while(1) {

sleep(1);

printf("sleeping %d\n", i);

i++;

}

}

注:

(1)    如果在信号SIGINT(Ctrl + c)的信号处理函数show_handler执行过程中,本进程收到信号SIGQUIT(Crt+\),将阻塞该信号,直到show_handler执行结束才会处理信号SIGQUIT。

(2)    SA_NODEFER

一般情况下, 当信号处理函数运行时,内核将阻塞。但是如果设置了SA_NODEFER标记,

那么在该信号处理函数运行时,内核将不会阻塞该信号。

SA_NODEFER是这个标记的正式的POSIX名字(还有一个名字SA_NOMASK,为了软件的可移植性,一般不用这个名字)

SA_RESETHAND    当调用信号处理函数时,将信号的处理函数重置为缺省值。 SA_RESETHAND是这个标记的正式的POSIX名字(还有一个名字SA_ONESHOT,为了软件的可移植性,一般不用这个名字)

(3)    如果不需要重置该给定信号的处理函数为缺省值;并且不需要阻塞该给定信号(无须设置sa_flags标志),那么必须将sa_flags清零,否则运行将会产生段错误。但是sa_flags清零后可能会造成信号丢失!

http://webcache.googleusercontent.com/search?q=cache:B2HsD1Zf2f8J:hi.baidu.com/operationsystem/blog/item/bb215411f4dc61f4c2ce79e6.html/cmtid/c150423c8b8feae13d6d97b0+sigaction&cd=1&hl=zh-CN&ct=clnk

linux下sigaction函数,sigaction函数解析相关推荐

  1. linux下C语言main函数参数解析

    1. linux下常见的main函数有两种形式: int main(int argc, char **argv) int main(int argc, char * argv[]) 2. 参数介绍 第 ...

  2. linux下的struct sigaction

    工作中使用案例: struct sigaction act; act.sa_sigaction = handleSignal; act.sa_flags = SA_SIGINFO; sigemptys ...

  3. Linux下的内存对齐函数

    在Linux下内存对齐的函数包括posix_memalign, aligned_alloc, memalign, valloc, pvalloc,其各个函数的声明如下: int posix_memal ...

  4. linux uname内核,Linux下confstr与uname函数_获取C库与内核信息

    Linux下confstr与uname函数_获取C库与内核信息 #include #include  //uname int main(int argc, char **argv[]) { struc ...

  5. Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)

    1.exit()函数 exit(int n)  其实就是直接退出程序, 因为默认的标准程序入口为int main(int argc, char** argv),返回值是int型的. 一般在shell下 ...

  6. Linux系统怎么编译sin,linux下gcc编译sin函数出错的问题

    linux下gcc编译sin函数出错的问题 收藏 Q: I keep getting errors due to library functions being undefined, but I'm ...

  7. Linux 下调用UEFI的函数

    Linux 下调用UEFI的函数 摘要 Linux 调用UEFI function 时候调用约定的转换 64bits calling convention Microsoft calling conv ...

  8. linux终端护眼色参数,四个 Linux 下的“护眼”软件解析

    晚上熄灯后,看电脑时蓝光刺眼.推荐两个护眼软件.此外最低亮度还是觉得太亮,所以自己写一个调节工具,用一个半透明黑色的遮罩层覆盖屏幕以此"降低"亮度. Redshift Redshi ...

  9. linux下的常用时间函数总结

    1.Unix系统一直使用两种不同的时间值:"日历时间"和"进程时间" 1.1.日历时间,日历时间是从国际标准时间公元1970年1月1日00:00:00到现在所经 ...

  10. linux下C转码函数:iconv使用

    http://anfernee.blog.51cto.com/4828774/1240270 在linux下,如果需要将编码格式转换,可以使用iconv系列函数. 头文件: iconv.h 常用函数: ...

最新文章

  1. 任务流程管理,从繁杂的项目管理中解脱出来
  2. 浏览器检测,移动网络的在线离线及网络状态
  3. Linux进程命令PS用法笔记
  4. java技术专家学习路线图_向Java最佳专家的全球专家学习Java
  5. 新网卡不能绑定“旧”IP故障的解决
  6. MyEclipse配置Tomcat 6
  7. 打开excel显示php拓展名,新建xls文件提示扩展名不一致
  8. Linux虚拟内存管理 | 虚拟地址与物理地址映射、段错误SIGSEGV
  9. OpenGL学习(二)第一个OpenGL程序,绘制三角形
  10. Oracle数据库修改用户密码
  11. Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
  12. [2018.03.14 T2] 树(tree)
  13. 智能终端代替传统设备 手机APP离线识别车牌号
  14. React制作页面在线截图功能
  15. .jnlp 文件打开方式
  16. 最新XNA开发游戏“Particle Wars”--粒子之战!
  17. 用海伦公式计算三角形的周长与面积
  18. [渝粤教育] 东北大学 现代科学运算—MATLAB语言与应用 参考 资料
  19. 如何将最大化互信息引入到无监督域适应(UDA)任务?
  20. vue 上次登录时间_Vue设置长时间未操作登录自动到期返回登录页

热门文章

  1. mongodb的capped Collection集合
  2. 华为云云主机评测:最适合企业的的服务器
  3. Keil(MDK-ARM)系列教程(七)_菜单
  4. 2BizBox 中小企业ERP又一福音
  5. OpenCV处理鼠标事件
  6. 杀毒软件是计算机系统的什么,电脑杀毒软件哪个好
  7. 高年级学长给计算机大一学生的学习建议
  8. IOS筛选框的实现(仿糯米团)
  9. Elasticsearch 聚合之 Terms
  10. Java创建多级文件夹