APUE学习笔记——10 信号
信号的基本概念
产生信号的几种方式
处理信号的几种方式:
可靠信号与不可靠信号
——不支持排队,为普通信号。(不能用于统计信号发生次数的情景。)
不可靠信号
缺陷一:
int sig_int(); /* my signal handling function */
...
signal(SIGINT, sig_int); /* @1establish handler */
...
sig_int()
{
signal(SIGINT, sig_int); /* @2reestablish handler for next time */
...
./*process the signal ... */
...
}
缺陷二:
int sig_int(); /* my signal handling function */
int sig_int_flag; /* set nonzero when signal occurs */
main()
{
signal(SIGINT, sig_int); /* establish handler */
...
while (sig_int_flag == 0)
pause(); /* go to sleep, waiting for signal */
...
}
sig_int()
{
signal(SIGINT, sig_int); /* reestablish handler for next time */
sig_int_flag = 1; /* set flag for main loop to examine */
}
可靠信号:
解决不可靠信号缺陷一
解决不可靠信号缺陷二:
信号列表:
|
Signal
|
Description
|
|
SIGABRT
|
由调用abort函数产生,进程非正常退出
|
|
SIGALRM
|
用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
|
|
SIGBUS
|
某种特定的硬件异常,通常由内存访问引起
|
|
SIGCANCEL
|
由Solaris Thread Library内部使用,通常不会使用
|
|
SIGCHLD
|
进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
|
|
SIGCONT
|
当被stop的进程恢复运行的时候,自动发送
|
|
SIGEMT
|
和实现相关的硬件异常
|
|
SIGFPE
|
数学相关的异常,如被0除,浮点溢出,等等
|
|
SIGFREEZE
|
Solaris专用,Hiberate或者Suspended时候发送
|
|
SIGHUP
|
发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
|
|
SIGILL
|
非法指令异常
|
|
SIGINFO
|
BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
|
|
SIGINT
|
由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
|
|
SIGIO
|
异步IO事件
|
|
SIGIOT
|
实现相关的硬件异常,一般对应SIGABRT
|
|
SIGKILL
|
无法处理和忽略。中止某个进程
|
|
SIGLWP
|
由Solaris Thread Libray内部使用
|
|
SIGPIPE
|
在reader中止之后写Pipe的时候发送
|
|
SIGPOLL
|
当某个事件发送给Pollable Device的时候发送
|
|
SIGPROF
|
Setitimer指定的Profiling Interval Timer所产生
|
|
SIGPWR
|
和系统相关。和UPS相关。
|
|
SIGQUIT
|
输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
|
|
SIGSEGV
|
非法内存访问
|
|
SIGSTKFLT
|
Linux专用,数学协处理器的栈异常
|
|
SIGSTOP
|
中止进程。无法处理和忽略。
|
|
SIGSYS
|
非法系统调用
|
|
SIGTERM
|
请求中止进程,kill命令缺省发送
|
|
SIGTHAW
|
Solaris专用,从Suspend恢复时候发送
|
|
SIGTRAP
|
实现相关的硬件异常。一般是调试异常
|
|
SIGTSTP
|
Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
|
|
SIGTTIN
|
当Background Group的进程尝试读取Terminal的时候发送
|
|
SIGTTOU
|
当Background Group的进程尝试写Terminal的时候发送
|
|
SIGURG
|
当out-of-band data接收的时候可能发送
|
|
SIGUSR1
|
用户自定义signal 1
|
|
SIGUSR2
|
用户自定义signal 2
|
|
SIGVTALRM
|
setitimer函数设置的Virtual Interval Timer超时的时候
|
|
SIGWAITING
|
Solaris Thread Library内部实现专用
|
|
SIGWINCH
|
当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
|
|
SIGXCPU
|
当CPU时间限制超时的时候
|
|
SIGXFSZ
|
进程超过文件大小限制
|
|
SIGXRES
|
Solaris专用,进程超过资源限制的时候发送
|
APUE学习笔记——10 信号的更多相关文章
- APUE学习笔记——10信号——信号接口函数 signal 和 sigaction
signal函数 signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制.在后来的分支中,部分系统使用原来的不可靠机制定义signal函数,如 Solaris 10 .而 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号
如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...
- APUE学习笔记——10.可靠信号与不可靠信号
首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1 ...
- APUE学习笔记——10.18 system函数 与waitpid
system函数 system函数用方便在一个进程中执行命令行(一行shell命令). 用法如下: #include <stdio.h> #include <stdlib.h> ...
- APUE学习笔记——10.15 sigsetjmp和siglongjmp
转载自:sigsetjmp使用方法 如侵犯您的权益,请联系:windeal12@qq.com sigsetjmp使用方法 分类: c/c++ linux2012-02-03 12:33 1252人阅读 ...
- APUE 学习笔记(七) 信号
1.信号是软件中断,提供一种异步处理事件的方法 很多事件产生信号: (1)用户按下某些中断键,如 Ctrl + C键产生 SIGINT信号 (2)硬件异常产生信号,比如 除数为0,无效的内存引用 ( ...
- APUE学习笔记5——信号、信号集和进程信号屏蔽字
1 信号传递过程 当引发信号的事件发生时(如软硬件异常.软件定时.终端产生信号或调用kill函数等等),会产生信号,内核会发送给目标进程. 在信号产生到信号传递给目标进程之间的时间间隔内,称该信号为未 ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
随机推荐
- 前端学习之NaN浅析
在学习Java集合的时候遇到了Float.isNaN(float)函数,点进去一看就不理解了,函数实现如下: public static boolean isNaN(float v) { return ...
- 20145302张薇 Java第一周学习总结
20145302张薇 <Java程序设计>第一周学习总结 教材学习内容总结 第一章 1995年,java被公认诞生.java第一开始为了消费性数字产品(如手机)而设计,所以java本身有很 ...
- 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法
前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: l ...
- Net_Prop 之 CTerrorPlayer 属性
Sub-Class Table (1 Deep): DT_TerrorPlayer Sub-Class Table (2 Deep): DT_CSPlayer Sub-Class Table (3 D ...
- MAC OS X的命令行技巧
##透明度#降低透明度defaults write com.apple.universalaccess reduceTransparency -bool true#恢复默认透明度defaults wr ...
- Linux 修改SSH端口及禁用ROOT远程SSH登陆
打开配置文件: vim /etc/ssh/sshd_config 修改Port及PermitRootLogin节点 : //默认为yes 允许 no表示禁止 PermitRootLogin no // ...
- 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
文章翻译: 翻译 以下文章来源: 链接
- .net知识点汇总
死锁的必要条件?怎么克服? 答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用 ...
- 分页式存储管理方式AND请求分页式存储管理
先说下什么是页(页面):就是将用户的程序的的地址空间分成固定大小的区域,称为”页“,或者”页面“ 之后将这些页离散的放进内存中,这样解决了内存的碎片问题 记得老师上课说了下这两个概念不能混,现在区分下 ...
- Vuex访问状态对象的方法
除了<Vuex最基本样例>中的方法外,还有两种方法访问状态对象state: 只需要改app.vue文件 方法一:引入computed <template> <div id ...