linux信号处理 --和信号相关的几个系统调用
来源:互联网 发布:开元盛世公元网络会所 编辑:程序博客网 时间:2024/04/28 02:36
一、sigaction函数
#include <signal.h>
int sigaction(int sig,const struct sigaction* act,strcut sigaction* oact);
sig参数指出要捕获的信号类型,act参数指定新的信号处理方式,oact参数则输出信号先前的处理方式(如果不为NULL的话),act和oact都是sigaction结构体类型的指针
信号集函数
#include <signal.h>
int sigemptyset(sigset_t* _set)
int sigfillset(sigset_t* _set)
int sigaddset(sigset_t* _set,int signo)
int sigdelset(sigset_t* _set,int signo)
int sigismember(const siggset_t* set,int signo)
进程信号掩码
指定进程的信号掩码,这样这样的信号就不能发送给本进程
int sigprocmask(int _how,const sigset_t* set,sigset_t* oset);
how参数的类型
SIG_BLOC 新的进程掩码是其当前值和_set指定信号集的并集
SOG_UNBLOCK 新的进程信号掩码是其当前值和~_set信号集的交集,因此_set指定的信号集将不被屏蔽
SIG_SETMASK 直接将进程掩码设置为_set
被挂起的信号
设置进程信号掩码后,被屏蔽的信号将不能被进程接受,如果给进程发送一个被屏蔽的信号,则操作系统将该信号设置为进程的一个被挂起的信号,如果我们取消对该信号的屏蔽,则它能立即被进程接收到,如下函数可以获得进程当前被挂起的信号集
int sigpending(sigset_t* set);
进程即使多次接收到同一个被挂起的信号,sigpending函数也只能反映一次,并且当我们再次使用sigprocmask使能该挂起的信号时,该信号的处理函数也只被触发一次。
几个特殊的和网络编程有关的信号:
SIGHUP:
当挂起进程的控制终端时,SIGHUP信号被触发,对于没有控制终端的网络后台程序而言,他们通常利用SIGHUP信号来强制服务器重读配置文件
SIGPIPE
默认情况下,往一个读端关闭的管道或socket连接中写数据将引发SIGPIPE信号,SIGPIPE默认欣慰是结束进程,需要修改这样的默认行为。
我们也可以利用I/O复用系统调用来检测管道和socket连接的读端是否已经关闭。以poll为例子,当管道的读端关闭时,写端文件描述符上的POLLHUP事件将被触发,当socket连接被对方关闭时,socket上的POLLRDHUP事件将被触发
SIGURG
在linux环境下,内核通知应用程序带外数据到达主要有两种方法:一种是I/O复用技术,select等系统调用在接收到带外数据时将返回,并向应用程序报告socke上的异常事件,另一种方法就是SIGURG信号
- linux信号处理 --和信号相关的几个系统调用
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- Linux信号和信号处理
- Linux信号简介和信号处理相关函数
- Linux信号简介和信号处理相关函数
- 信号处理的调用
- linux 信号 中断的系统调用
- Linux 信号处理机制中涉及到的相关几个函数解释
- 信号和系统调用之间的关系
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- Linux信号、信号处理和信号处理函数
- 黑马程序员——Java基础——IO流笔记(BufferedReader使用示例)
- 妈妈
- 优萨电子 自动化时代的工匠
- 深入理解javascript原型和闭包(9)——简述【执行上下文】下
- std命名空间中的生活。
- linux信号处理 --和信号相关的几个系统调用
- Java设计模式菜鸟系列(十二)组合模式建模与实现
- 网络流24题 之十五 汽车加油行驶问题 分层图
- pointer 1
- 6 --> java 运算符、表达式、语句
- Unreal Engine 4 创建Destructible Mesh(可破坏网格)
- 黑马程序员——Java基础——IO流笔记(InputStreamReader和OutputStreamWriter使用示例)
- 输出PDF文档到ASP.NET页面
- atoi