linux sigaction信号处理
sigaction函数相比signal函数更为复杂,但更具灵活性,下面具体介绍她的结构和用法:
#include <signal.h>
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
signum:要操作的信号。
act:要设置的对信号的新处理方式。
oldact:原来对信号的处理方式。 如果不需要设置
返回值:0 表示成功,-1 表示有错误发生。
struct sigaction {
union {
__sighandler_t _sa_handler;
void (*_sa_sigaction)(int, struct siginfo *, void *);
} _u;
sigset_t sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
#define sa_handler _u._sa_handler
#define sa_sigaction _u._sa_sigaction
typedef struct {
int si_signo; //同处理器函数的信号编号
int si_code;
union sigval si_value; //sigqueue()发送信号时伴随的数据
pid_t si_pid;
long si_band;
int si_fd;
...
} siginfo_t;
这里给出标准信号的用法:
#include <iostream>
#include <string>
#include <signal.h> using namespace std; void handler( int signo, siginfo_t* info, void* context)
{
cout<<"catch "<<endl;
if (signo == SIGINT) {
cout<<"Crtl+c catched!"<<endl;
sleep();
}
} int main()
{
struct sigaction sa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO;
sigemptyset(&sa.sa_mask); //这里处理器调用过程中不阻塞任何信号,除了调用的信号。标准信号不排队,只保留一个。 sigaction(SIGINT, &sa, NULL); while ()
{
sleep();
}
return ;
}
linux sigaction信号处理的更多相关文章
- linux 多线程信号处理总结
linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知 ...
- linux 捕获信号处理中遇到的死锁
tag: 信号 signal sigchld 死锁 堆栈 我们的程序需要捕获信号自己处理,所以尝试对1-32的信号处理(后面33-64的信号不处理).但是在调试代码时,发现一个线程死锁的问题.程序 ...
- linux 下信号处理命令trap && linux下各种信号的意义
1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...
- Linux——浅析信号处理
信号及其处理 信号处理是Unix和LInux系统为了响应某些状况而产生的事件,通常内核产生信号,进程收到信号后采取相应的动作. 例如当我们想强制结束一个程序的时候,我们通常会给它发送一个信号,然后该进 ...
- linux sigaction 函数 用法释义
使用 sigaction 函数: signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX 标准定义的信号处 ...
- sigaction信号处理
1. sigaction int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); signu ...
- 【linux高级程序设计】(第十章)Linux异步信号处理机制 3
信号屏蔽 信号忽略:系统仍然传递该信号,只是相应的进程不做任何处理 信号屏蔽:进程不捕获信号,信号处于未决状态,当不再屏蔽信号时可以捕获之前被屏蔽的信号. 信号集数据结构定义: typedef __s ...
- linux signal 处理
v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VM ...
- linux下 signal信号机制的透彻分析与各种实例讲解
转自:http://blog.sina.com.cn/s/blog_636a55070101vs2d.html 转自:http://blog.csdn.net/tiany524/article/det ...
随机推荐
- IIS的虚拟目录和子应用程序
一.虚拟目录 虚拟目录是指在发布的网站下建立一个虚拟子目录,指定一个固定的物理路径做为站点的应用路径. 1. 虚拟目录与父级站点共用一个应用程序池,网站Test是在D盘下建立了的虚拟目 ...
- (负)-margin在页面布局中的应用
有关margin的原理可以看看这篇文章:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812 有关margin负值的几 ...
- 关于通过addClass与removeClass用jquery控制有良好兼容的CSS3样式
hi:)好久不见~最近被jquery的animate对某些CSS3特性不兼容搞的头晕眼花,果断百度,阅读了一些高手的博客后突然发现平常很少用到的addClass和removeClass属性居然还可以这 ...
- linshi_temp_erweima_html
<!doctype html><html><head><meta charset="utf-8"><meta content= ...
- 《高性能Javascript》读书笔记-2
第二章 数据存取 字面量: 代表自身 不存特定位置 :字符串 数字 bool 对象 array 函数 正则表达 本地变量: var 数组: 存储在js数组对象内部,以数字做索引 对象成员 存储在 ...
- mysql导出数据表结构,必须退出mysql命令.重新使用msyqldump命令
只导出数据库中所有表结构(-d 减去数据) 导出所有表结构和数据 mysqldump -uroot --default-character-set=utf8 -p123-d必须空格good>H: ...
- 各硬件设备在Linux中的文件名
- shell脚本学习(五)
1.统计文件的行数.单词数.字符数 1)行数: wc -l file cat file | wc -l 2)单词数 wc -w file cat file | wc -w 3)统计字符数 wc -c ...
- 打开"我的电脑"等特殊文件夹ShellExecute
procedure TForm2.btn10Click(Sender: TObject); begin ShellExecute(handle,'open','mailt', nil,nil,SW_S ...
- jxls导出EXCEL模板
http://jxls.sourceforge.net/ InputStream templateInput = null; InputStream in = null; OutputStream o ...