signal基础
signal
man 7 signal
1.kill -l 显示所有信号
kill -signal PID
killall -signal name
2.产生信号
ctrl+c => SIGINT
ctrl+\ => SIGQUIT
ctrl+z => SIGTSTP
信号9(SIGKILL),19(SIGSTOP)不能被阻塞(进程中可屏蔽两信号sigaddset()不报错,但不起作用),不能被忽略,也不能注册信号处理函数(直接报错)。
信号共计SIGRTMAX个,其中32,33无信号,
if(sigi == SIGKILL || sigi == SIGSTOP || sigi == 32 || sigi == 33)
kill命令默认发送信号15(SIGTERM)。
3.系统默认信号处理方式
- linux对每种信号都规定了默认动作,具体可参考man 7 signal
- SIGCHLD 忽略
- 实时信号的缺省反应是结束进程。
- 如果不想程序采用默认动作处理进程,需要捕捉函数(为想要特殊处理的函数指定信号处理函数)。如发生SIGALARM或SIGPIPE,进行超时处理即可,不必终止进程。此外若想发生信号时做特殊处理也应指定信号处理函数,如发生段错误时,提示用户等。
4.操作函数
- kill
#include <signal.h>
int kill(pid_t pid, int signo);
- raise自发信号
int raise(int signo);
- abort 自发SIGABRT信号,终止
void abort(void);
- alarm闹钟
unsigned int alarm(unsigned int sec);
原来没有调度alarm返回0或以前设定的闹钟时间还剩多少秒。如果sec为0,表示取消以前设定的闹钟,返回剩余的秒数。
5.阻塞信号集函数
每个进程都有一个用来描述哪些信号递送到进程时将被阻塞的信号集,该信号集中所有信号在递送到进程后都将被阻塞。
阻塞信号集也叫当前进程的信号屏蔽字(signal Mask)。
#include <signal>
int sigemptyset(sigset_t *set);置0
int sigfillset(sigset_t *set);置1
int sigaddset(sigset_t *set, int signum);某位置1
int sigdelset(sigset_t *set, int signum);某位置0
成功0,失败-1.
int sigismember(const sigset_t *set, int signum);
包含该位返回1,不包含返回0,错误返回-1.
6.信号集函数
int sigpromask(int how, const sigset_t *set, sigset_t *oset);
成功返回0,失败返回-1;
how:SIG_BLOCK +, SIG_UNBLOCK -, SIG_SETMASK.
int sigpending(sigset_t *set);
读取未决信号集。
成功0,失败-1。
注:实际执行信号的处理动作称为信号递达(Delivery);未决(信号从产生到递达之间)。
int pause(void);
pause函数使调用进程挂起直到有信号递达。信号的处理动作是终止进程,则进程终止,pause不能返回;忽略,则进程处于挂起状态,pause不返回;捕抓,则调用信号处理函数后pause返回-1,errno置为EINTR。
pause只有出错的返回值。
int sigsuspend(const sigset_t *sigmask);
和pause一样,无成功返回值。
只有执行了一个信号处理函数后,sigsuspend才返回,返回-1,errno置为EINTR。
注:sigsuspend临时用sigmask取代信号屏蔽字,挂起进程。调用sigsuspend时应将想获取的信号从原来的信号屏蔽子中移除填充到sigmask中。
可参考:
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html
signal基础的更多相关文章
- Perl信号处理
本文关于Perl信号处理的内容主体来自于<Pro Perl>的第21章. 信号处理 操作系统可以通过信号(signal)处理机制来实现一些功能:程序注册好待监视的信号处理机制,在程序运行过 ...
- 异步处理方式之信号(一):基础知识和signal函数说明
文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 3. 函数signal 3.1 signal函数 ...
- Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...
- Linux 信号(二)—— signal 函数
弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心 ...
- Pyqt 基础功能
总结Pyqt的基础知识 1. Pyqt 设置禁止最大化及禁止拖拽窗口大小 # PyQT禁止窗口最大化按钮: self.setWindowFlags(QtCore.Qt.WindowMinimizeB ...
- C++基础_总结
(1)多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) 多态分为两种:静态和动态.静态主要包括函数重载和模板:动态主要是依靠虚函数实现的. 静态联编:重载函数不加virtual关键字 ...
- 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”
回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...
- Nginx概念及基础安装--详细讲解
1.主要内容: Nginx的基础 特性 配置部署 优化(了解) 2.Nginx 是什么? Nginx是一个开源的,支持高性能,高并发的www ...
- First step to Signal —— in Linux C Programing
1. What's signal 信号是软件中断,提供了一种处理异步事件的方法.(见<Unix环境高级编程>)一般使用时需包含 signal.h 库. 每个信号命名由SIG开头,实际值为正 ...
随机推荐
- [Transducer] Step by Step to build a simple transducer
Transducers are composable algorithmic transformations. They are independent from the context of the ...
- jQuery animate方法开发极客标签Logo动画融合效果
在线演示 本地下载 jQuery的animate方法基础使用,演示如何生成一个jQuery animate方法开发极客标签Logo动画融合效果 相关代码录播:jQuery animate方法开发极客标 ...
- DD_belatedPNG
我们知道IE6是不支持透明的PNG的,这无疑限制了网页设计的发挥空间. 然而整个互联网上解决这个IE6的透明PNG的方案也是多不胜数,从使用IE特有的滤镜或是expression,再到javascr ...
- flowplayer视频播放插件[转]
最近项目中需要添加播放视频的功能,视频文件是flv格式的.在网上找了一些jQuery视频播放插件,还是觉得“flowplayer”要好一些.特将使用方法记录一下. flowplayer也有html5版 ...
- 揭秘ThreadLocal(转)
转载自:掘金大闲人柴毛毛博客. ThreadLocal是开发中最常用的技术之一,也是面试重要的考点.本文将由浅入深,介绍ThreadLocal的使用方式.实现原理.内存泄漏问题以及使用场景. Thre ...
- 18-spring学习-利用Annotation配置AOP
之前是通过配置完成aop操作,如果自己写的话,太麻烦了,可以使用基于annotation的配置完成. 第一步:打开AOP的annotation支持 加上一句话: <context:annotat ...
- javascript 图片预加载
<!DOCTYPE > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ...
- jquery api 常见api 元素操作例子
append_prepend.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...
- HTML5学习笔记 音频
HTML5提供了播放音频的标准. Web上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件比如flash来播放的.然而,并非所有的浏览器都拥有同样的插件. hmt ...
- IntelliJ IDEA导航特性Top20
在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及重构相关的特性.今天我将介绍另外一个利器——IntelliJ的导航(Navigation),只要运用得当,它将 ...