引言
sigaction 函数的功能是检查或修改(检查并修改)与指定信号相关的处理动作。此函数取代了早期 Unix 的 signal 函数。
1.0 函数声明
1 |
|
1.1 参数
- signo
要检测或者要修改其具体动作的信号编号。 - act
当该参数不为 NULL 时,指定要修改的新的动作。 - oact
当该参数不为 NULL 时,将该信号的上一个动作(更新前的动作)保存在该对象中。1.2 sigaction 结构体
sigaction 函数的后两个参数都用到了该结构体。
1 |
|
sa_handler
信号处理函数的地址,也可以取值为 SIG_IGN(表示忽略该信号) 或 SIG_DFL(采用默认的处理行为)。sa_mask
用来指定在信号处理函数执行期间需要被屏蔽的信号,特别是当某个信号被处理时,它自身会被自动放入进程的信号掩码,因此在信号处理函数执行期间这个信号不会再度发生。sa_flag
用于指定信号处理的行为,它可以是以下值的“按位或”组合:- SA_RESTART 使被信号打断的系统调用自动重新发起。
- SA_NODEFER 使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。
- SA_ONSTACK 针对此信号调用处理器函数时,使用了由 sigaltstack() 安装的备选栈。
- SA_NOCLDSTOP 使父进程在它的子进程暂停或继续运行时不会收到 SIGCHLD 信号。
- SA_NOCLDWAIT 使父进程在它的子进程退出时不会收到 SIGCHLD 信号,这时子进程如果退出也不会成为僵尸进程。
- SA_RESETHAND 信号处理之后重新设置为默认的处理方式。
- SA_SIGINFO 使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。
sa_sigaction
信号处理函数的地址,当 sa_flags 成员的值包含了 SA_SIGINFO 标志时,系统将使用 sa_sigaction 函数作为信号处理函数获得关于信号的更详细的信息,否则使用 sa_handler 作为信号处理函数。
1.3 返回值
- 0
函数执行成功 - -1
函数执行失败