信号处理函数(3)-sigaction() 为信号注册信号捕捉函数
2018-01-02 19:25
302 查看
定义:
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。
示例:
运行结果:
yongdaimi@iMac:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)
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; }
运行结果:
yongdaimi@iMac:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)
相关文章推荐
- 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
- linux信号机制之sigaction 浅析,signal 函数,信号捕捉 信号编码意义
- siganl与sigaction注册信号处理函数的区别
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉(转)
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号捕捉和sigaction函数和sigqueue函数
- 41-新的信号注册函数 sigaction
- LINUX信号-sigaction更强壮的信号注册函数
- 信号注册函数sigaction
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉
- linux 信号的捕捉和发送函数的简单使用:sigaction()和sigqueue()
- siginalExample.c(使用signal和sigaction函数捕捉和处理信号)
- Linux信号signal介绍,signal()函数,sigaction()函数
- 信号安装函数sigaction与结构体struct sigaction
- 当子进程结束的时候,其设置的信号捕捉函数不会再父进程生效