sigaction

sigaction sign sigaction
基础资料
简介

概述

sigaction(查询或设置信号处理方式)

相关函数 signal,sigprocmask,sigpending,sigsuspend, sigemptyset

表头文件 #include

定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

函数说明 sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。

如参数结构sigaction定义如下

struct sigaction {

union{

__sighandler_t sa_handler;

void (*_sa_sigaction)(int,struct siginfo *, void *);

}_u

sigset_tsa_mask;

unsigned long sa_flags;

void (*sa_restorer)(void);

}

信号处理函数可以采用void (*sa_handler)(int)或void (*sa_sigaction)(int, siginfo_t *, void *)。到底采用哪个要看sa_flags中是否设置了SA_SIGINFO位,如果设置了就采用void (*sa_sigaction)(int, siginfo_t *, void *),此时可以向处理函数发送附加信息;默认情况下采用void (*sa_handler)(int),此时只能向处理函数发送信号的数值。

sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。

sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。

sa_restorer 此参数没有使用。

sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。

sa_falgs还可以设置其他标志:

SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL

··SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用

SA_NODEFER :一般情况下,当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记,那么在该信号处理函数运行时,内核将不会阻塞该信号

sigaction

示例

#include

static void int_hander(int s)

{

printf("Catch a signal sigint\n");

}

int

main(void)

{

int i;

struct sigaction act, oact;

act. sa_handler = int_hander;

sigemptyset(&act. sa_mask); //清空此信号集

act. sa_flags = 0;

sigaction(SIGINT, &act, &oact);

//signal(SIGINT, SIG_IGN);

while(1){

for(i=0; i<5; i++){

write(1, ".", 1);

sleep(1);

}

write(1, "\n", 1);

}

sigaction(SIGINT, &oact, NULL); //恢复成原始状态

return 0;

}

首页
科技
#贵族
最新入驻
贾科莫·普契尼
Caroline Lufkin
翁建宇
相关阅读
waitpid
内容词条·1032人浏览
共享库
内容词条·3995人浏览
pause函数
内容词条·4451人浏览
fchown
内容词条·3064人浏览
chdir
内容词条·6656人浏览
粘住位
内容词条·4616人浏览
  • 网站地图
  • |

Copyright 2023 fuwu029.com赣ICP备2022008914号-4