使用sigaction函数
sigaction函数
修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数)
;失败:-1,设置errno
参数:
act:传入参数,新的处理方式。oldact:传出参数,旧的处理方式。
struct
sigaction结构体
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_restorer:该元素是过时的,不应该使用,POSIX.1标准将不指定该元素。(弃用)
sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。(很少使用)
重点掌握:
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。也可赋值为SIG_IGN表忽略
或 SIG_DFL表执行默认动作
② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。用sigaddset函数添加需要被捕捉的信号。
,表使用默认属性:为0的时候,可以屏蔽正在处理的信号(若在处理2号信号时又有2号信号,则此时传来的2号信号会被屏蔽)。
不多说了,上代码:
#include
<stdlib.h>
#include
<stdio.h>
#include
<signal.h>
void func(int
signal)
{
printf("%d号信号被捕捉。\n", signal);
}
int main(void)
{
struct
sigaction act, oldact;
act.sa_handler = func;
act.sa_flags = 0;//为0的时候,可以屏蔽正在处理的信号(若在处理2号信号时又有2号信号,则>会被屏蔽)
sigemptyset(&act.sa_mask);//sa_mask是一个临时信号集,将其清零(初始化I)
sigaddset(&act.sa_mask, SIGQUIT);//将3号信号添加到信号集,即:3号信号就是我们在处理2号信号的时候需要屏蔽的那个信号,也许可以添加其他信号,比如20号信号
sigaddset(&act.sa_mask, SIGTSTP);
int s_ret = sigaction(SIGINT, &act, &oldact);
if (0>s_ret)
{
perror("sigaction error");
exit(1);
}
while (1);
return 0;
}
号信号。所以在我按下ctrl+\之后并没有反应,程序依旧执行,但是在真正的Linux独立系统中,按下之后该程序会被杀掉的,就如同我按下ctrl+z之后,程序挂起:
接下来kill掉就是了。
———————————————隔了不到十分钟又来更新的分割线——————————————-
我们来看看信号捕捉特性
进程正常运行时,默认PCB中有一个信号屏蔽字,假定为☆,它决定了进程自动屏蔽哪些信号。当注册了某个信号捕捉函数,捕捉到该信号以后,要调用该函数。而该函数有可能执行很长时间,在这期间所屏蔽的信号不由☆来指定。而是用sa_mask来指定。调用完信号处理函数,再恢复为☆。
XXX信号捕捉函数执行期间,XXX信号自动被屏蔽。
个实时信号支持排队)
所说的内容,我们这样改代码:
void func(int
signal)
{
printf("%d号信号被捕捉。\n", signal);
sleep(5);//睡眠十秒,模拟处理信号的函数处理时间很长的那种情况
puts("———————————— - fiish———————");
}
我的测试结果:
翻转为1,信号集是什么?是位图。他不能为多次的相同的信号计数。所以,再多的相同信号在系统看来也只是一个罢了。
————————————–再更新一次————————————-
signal()和sigaction()函数是捕捉信号的函数么?是么?是么?是么?
不是,他俩只是注册信号捕捉函数的函数,真正动手捉信号的是内核。记得啊。本质区别的。
使用sigaction函数的更多相关文章
- Linux C--信号 sigaction函数
使用 sigaction 函数: signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX 标准定义的信号处 ...
- Linux 信号(三)—— sigaction 函数
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 #include <signal.h> int sigaction(int signo, con ...
- sigaction 函数
本文主要参考<unix环境高级编程> sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). int sigaction(int signo,con ...
- 信号之sigaction函数
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(或同时执行这两种操作). #include <signal.h> int sigaction( int signo, c ...
- signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...
- sigaction函数的使用
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...
- sigaction函数解析
http://blog.chinaunix.net/uid-1877180-id-3011232.html sigaction函数解析 sigaction函数的功能是检查或修改与指定信号相关联的处理 ...
- 《UNIX环境高级编程》笔记--sigaction函数
sigaction函数的功能是检查或修改指定信号相关联的处理动作,此函数取代UNIX早期版本使用的signal函数. #include<signal.h> int sigaction(in ...
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
lienhua342014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...
随机推荐
- 自定义锁屏图片 win7
win + R打开运行对话框 输入Regedit 点确定 进入注册表,找到以下项次 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersi ...
- html地址--待更新
11.学习笔记: 视频直播技术:ijkplayer技术:jni技术: https://www.cnblogs.com/renhui/category/1011048.html: IM:环信, xmpp ...
- T-SQL 无参数的存储过程的创建和执行
use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery') drop procedure ...
- IIS 反向代理设置
http://blog.csdn.net/yuanguozhengjust/article/details/23576033
- postgresql数据库常用操作命令及SQL语言
(1)登录 peng@peng-virtual-machine:~$ sudo -u postgres psql 以用户postgres身份登录,postgres为用户名,可有多个用户,登录时会要求输 ...
- java.util.stream 库简介
Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...
- SAS获取最后一条观测到指定宏
data theLast; set sashelp.class nobs=last point=last; output; stop; run; data _null_; set theLast; c ...
- 通过OTA的方式在局域网分发iOS应用
公司的一个项目有Android和iOS的app,Android的下载和安装都很方便,不过iOS有些麻烦,因为项目本身有些限制,主要有以下一些障碍:1.iOS的版本不是通过Appstore分发.2.出于 ...
- hbase启动后子节点的regionserver不能启动
启动hbase后,主节点的进程正常,但是子节点的regionserver进程会自动挂掉 然后我们看看子节点的情况 可以看到挂掉了 我们这样解决问题,先把hadoop目录下的这个两个文件放到hbase的 ...
- 《Linux 性能及调优指南》写在后面的话
感谢飞哥的翻译. 目前飞哥 (http://hi.baidu.com/imlidapeng)的网址已经不能访问了. <Linux 性能及调优指南>这本书的原文地址:http://www.r ...