定义:
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
表头文件:
#include<signal.h>
说明:
sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
如参数结构sigaction定义如下
struct sigaction
{
void (*sa_handler) (int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
}
sa_handler: 函数指针,指定当信号到来时由哪个函数来处理,函数原型为 void foo(int);
sa_mask: 临时屏蔽字,在处理信号时,屏蔽哪些信号。
sa_flags 用来设置信号处理的其他相关操作, 可设置为0
返回值:
执行成功则返回0, 如果有错误则返回-1。
示例:
#include <stdio.h> #include <unistd.h> #include <signal.h> void recv_sig(int num) { int n = 5; printf("I have received a signal\n"); while(n--) { printf("num = %d\n", num); sleep(1); } } int main() { struct sigaction act; act.sa_handler = recv_sig; sigemptyset(&act.sa_mask); // 当处理SIGUSR1信号时,暂时屏蔽SIGQUIT信号 sigaddset(&act.sa_mask, SIGQUIT); act.sa_flags = 0; sigaction(SIGUSR1, &act, NULL); while(1) { printf("*************\n"); sleep(1); } return 0; }
运行结果:
[email protected]:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)