sigaction函数中 SA_NODEFER与sa_mask之间
2015-07-01 15:12
811 查看
函数原型:
int sigaction(int signo, struct sigaction *act, struct sigaction *oldact) ;
signo :需要处理的特定的信号
act :设定对信息处理的动作
oldact :返回signo信号的当前设置
结构体sigaction包含的元素:
(1) void (*sa_handler)() ; //旧有的信号处理函数
(2)void (*sa_sigaction)(int , siginfo_t*, void*) //新的信号处理函数
(3)sigset_t sa_mask ; // 信号阻塞设置
(4) int sa_flags ; // 处理信号的设置
flags有四个取值状态:
(1) SA_RESETHAND : 当调用信号处理函数时,将信号处理器设置为缺省值SIG_DFL, 这句话的意思也就是说当signo信号出现第二次的时候
信号处理终止进程,因为第一次接受的时候是将其设置为SIG_DFL
(2)SA_NODEFER: 不在阻塞与处理多个signo相同的信号。(没有这个状态项赋值给flags的时候默认signo信号是阻塞的)。这块最容易混,因为有些人会认为flags =
SA_NODEFER,所有的信号都将不阻塞,这个理解是错误的,这个状态的设定不阻塞只是与函数第一个参数signo有关,与sa_mask里面设置的
阻塞信号无关,sa_mask中的信号仍为阻塞信号。
(3)SA_RESTART: 如果信号中断了某个系统调用,则系统会自动启动该系统调用。
(4)SA_SIGINFO : 设置了使用新的处理函数, 未设置则使用旧有的处理函数 。
发表此博文主要是想告诉新手SA_NODEFER与sa_mask之间不冲突。
声明:有些信息是我在做试验中发现的,也有可能不是特别准确,如果有人发现错误,欢迎大家批评指正。谢谢
int sigaction(int signo, struct sigaction *act, struct sigaction *oldact) ;
signo :需要处理的特定的信号
act :设定对信息处理的动作
oldact :返回signo信号的当前设置
结构体sigaction包含的元素:
(1) void (*sa_handler)() ; //旧有的信号处理函数
(2)void (*sa_sigaction)(int , siginfo_t*, void*) //新的信号处理函数
(3)sigset_t sa_mask ; // 信号阻塞设置
(4) int sa_flags ; // 处理信号的设置
flags有四个取值状态:
(1) SA_RESETHAND : 当调用信号处理函数时,将信号处理器设置为缺省值SIG_DFL, 这句话的意思也就是说当signo信号出现第二次的时候
信号处理终止进程,因为第一次接受的时候是将其设置为SIG_DFL
(2)SA_NODEFER: 不在阻塞与处理多个signo相同的信号。(没有这个状态项赋值给flags的时候默认signo信号是阻塞的)。这块最容易混,因为有些人会认为flags =
SA_NODEFER,所有的信号都将不阻塞,这个理解是错误的,这个状态的设定不阻塞只是与函数第一个参数signo有关,与sa_mask里面设置的
阻塞信号无关,sa_mask中的信号仍为阻塞信号。
(3)SA_RESTART: 如果信号中断了某个系统调用,则系统会自动启动该系统调用。
(4)SA_SIGINFO : 设置了使用新的处理函数, 未设置则使用旧有的处理函数 。
发表此博文主要是想告诉新手SA_NODEFER与sa_mask之间不冲突。
声明:有些信息是我在做试验中发现的,也有可能不是特别准确,如果有人发现错误,欢迎大家批评指正。谢谢
相关文章推荐
- signal系列之sigaction函数
- Leetcode 116 Populating Next Right Pointers in Each Node 二叉树填充next指针指向右侧结点
- 《转》 Openstack Grizzly 指定 compute node 创建 instance
- hadoop系列 第一坑: hdfs JournalNode Sync Status
- 【nodejs】 npm 注意事项
- leetcode - Remove Nth Node From End of List
- nodejs入门(一)
- 动态修改 NodeJS 程序中的变量值
- ENode框架Conference案例分析系列之 - ENode框架初始化
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped
- nodejs经验
- 【LeetCode】Remove Nth Node From End of List
- nodejs Crypto使用
- node.js安装、使用
- 【nodejs】 文件系统(fs) 之读写文件
- java.io.FileNotFoundException: /home/hadoop/hadoop/dfs/namenode/current/VERSION (Permission denied)
- 【nodejs】关于 alert 和 document