您的位置:首页 > Web前端 > Node.js

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之间不冲突。

声明:有些信息是我在做试验中发现的,也有可能不是特别准确,如果有人发现错误,欢迎大家批评指正。谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息