【信号】信号捕捉之sigaction
sigaction是系统提供的另一个信号处理函数。负责检查或修改指定信号的关联处理动作。函数原型如下:
[code]int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
signum是指需要处理的信号编号,act 和oldact都是结构体指针,如果不需要修改对应信号的动作,可以将act 设置为空。如果需要修改其动作(捕捉),将结构体的指针传入。oldact顾名思义,是该信号之前的处理方式,获取以前的处理方式在处理信号后,便于恢复以前的动作。
linux系统下其结构体具体信息如下:
[code]struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); };
sa_handler 是指向参数类型为int 返回值为空的函数指针,也就是信号捕捉函数的地址。如果设置为SIG_DFL则是对信号执行默认操作。如果设置为SIG_IGN则是忽略。
sa_sigaction是指向另一个信号处理函数的函数指针。
sa_mask 是一个信号集,执行信号捕捉函数期间,对sa_mask中的信号进行屏蔽
当 sa_flags 的值包含了 SA_SIGINFO 标志时,系统将使用 sa_sigaction 函数作为信号处理函数,否则使用 sa_handler 作为信号处理函数
sa_flags 可以是以下值的“按位或”组合。
SA_RESTART:使被信号打断的系统调用自动重新发起。
SA_NOCLDSTOP:使父进程在它的子进程暂停或继续运行时不会收到 SIGCHLD 信号。
SA_NOCLDWAIT:使父进程在它的子进程退出时不会收到 SIGCHLD 信号,这时子进程如果退出也不会成为僵尸进程。
SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。
SA_RESETHAND:信号处理之后重新设置为默认的处理方式。
SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。
通常 将sa_flags设置为0.
sa_restorer在设计之初就不是打算给用户使用的,所以编程时不关心
sigaction返回值和信号部分函数一致,成功返回0,如果出错,返回-1,errno被设置为错误原因
[code]#include "apue.h" typedef void Sigfun(int); void docatch(int signo) { printf("docatch catch signal is %d\n",signo); } int main(int argc,char **argv) { struct sigaction act; act.sa_handler = docatch; sigemptyset(&act.sa_mask); // sigaddset(&act.sa_mask,SIGQUIT); act.sa_flags = 0; if(sigaction(SIGINT,&act,NULL) == -1){ printf("sigaction error\n"); exit(1); } printf("sigaction success\n"); while(1); return 0; }
- Linux 改进捕捉信号机制(sigaction,sigqueue)
- 信号处理函数(3)-sigaction() 为信号注册信号捕捉函数
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction 浅析,signal 函数,信号捕捉 信号编码意义
- Linux信号捕捉之sigaction
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉(转)
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- siginalExample.c(使用signal和sigaction函数捕捉和处理信号)
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
- linux 信号的捕捉和发送函数的简单使用:sigaction()和sigqueue()
- sigaction 读取和修改与指定信号相关联的处理动作 捕捉信号ctr+c
- linux信号捕捉和sigaction函数和sigqueue函数
- Linux捕捉信号机制之(signal,kill)、(sigaction,sigqueue)
- sigaction安装信号
- signal函数、sigaction函数及信号集操作函数