sigaction 的使用
linux内核会发射一些信号,应用程序可以捕捉信号执行特定函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 成功:;失败:-,设置errno
act:传入参数,新的处理方式。oldact:传出参数,旧的处理方式。
struct sigaction结构体 struct sigaction { void(*sa_handler)(int);
sigset_t sa_mask; int sa_flags;
};
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。也可赋值为SIG_IGN表忽略 或 SIG_DFL表执行默认动作
② sa_mask: 调用信号回调函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。用sigaddset函数添加需要被捕捉的信号。
③ sa_flags:通常设置为0,表使用默认属性:为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 = ; 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 (>s_ret)
{
perror("sigaction error"); exit();
} while (); return ; }
sigaction 的使用的更多相关文章
- Linux C--信号 sigaction函数
使用 sigaction 函数: signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX 标准定义的信号处 ...
- Linux 信号(三)—— sigaction 函数
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 #include <signal.h> int sigaction(int signo, con ...
- Linux进程间通信(一): 信号 signal()、sigaction()
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- sigaction和sigqueue
sigaction函数相对于siganl函数控制信号的发送要更加精确一些,其函数原型为: int sigaction(int signum, const struct sigaction *act, ...
- Linux 改进捕捉信号机制(sigaction,sigqueue)
sigaction函数 sigaction函数的功能是用于改变进程接收到特定信号后的行为. int sigaction(int signum, const struct sigaction *act, ...
- linux下的struct sigaction
工作中使用案例: struct sigaction act; act.sa_sigaction = handleSignal; act.sa_flags = SA_SIGINFO; sigemptys ...
- sigaction 函数
本文主要参考<unix环境高级编程> sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). int sigaction(int signo,con ...
- 信号之sigaction函数
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(或同时执行这两种操作). #include <signal.h> int sigaction( int signo, c ...
- signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...
- sigaction
概述编辑 sigaction(查询或设置信号处理方式) 相关函数 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset 表头文件 #incl ...
随机推荐
- 演示Eclipse插件实现代码提示和补全
续上文重拾< 两周自制脚本语言 >- Eclipse插件实现语法高亮, 但仅达到了演示Eclipse本身功能的程度, 与石头语言并无直接联系. 源码库相同, 仍在同一插件. 演示效果如下: ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- pthread小结
参考1 https://computing.llnl.gov/tutorials/pthreads/ 参考2 http://man7.org/linux/man-pages/man7/pthreads ...
- Android Studio Error:Execution failed for task ':app:preDebugAndroidTestBuild'.彻底解决的方法以及修改AScompileSDKVersion
Error Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency ...
- Android Studio教程10-Intent的详细使用
目录 1. Intent启动器 1.1. Intent的用途 1. 启动Activity 3. 传递广播 1.2. Intent类型 1.显示Intent 2.隐式Intent 2. 构建Intent ...
- 解决OracleOraDb10g_home1TNSListener服务无法启动
造成OracleOraDb10g_home1TNSListener服务无法启动可能有三种情况: listener.ora文件配置有错误导致无法启动 相关环境变量没设置好 删除客户端时导致服务端相关注册 ...
- Maven settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- android 6.0 Intent 安装apk闪退
需求描述: 利用android系统自带的DownloadManager下载apk文件,并且打开安装界面. 问题描述: 关于DownloadManager的使用网上有很多例子,在此不啰嗦.下载完成之后在 ...
- java有关 String char 常见问题 编辑中
1 输入输出有关 Scanner 的next()方法 返回值是String 所以尝试获得char时 应该用input.next().charAt[0] 2 空值 String 中null是指 对象引用 ...
- Ubuntu下找不到ttyUSB*问题解决
一.硬件连接 确认Ubuntu对USB转串口设备的支持. 1.# lsmod | grep usbserial如果有usbserial,说明系统支持USB转串口. 如果没有,先安装ch340驱动或者c ...