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 ...
随机推荐
- oracle中job定时器任务
对于DBA来说,经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作.但是,Oracle定时器Job时间的处理上,千变万化,今天我把比较常用 ...
- SDUT OJ 2607
/*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...
- composer错误_Content-Length mismatch, received 84697 bytes out of the expected..
使用composer下载源码出现错误 [Composer\Downloader\TransportException] Content-Length mismatch, received bytes ...
- kali 安装最新firefox的悲惨经历
最新的的firefox用的是量子内核,在windows上面的确感觉相比之前的firefox快了好多 想把kali 2017虚拟机的也替换掉 按照步骤: 1 添加源: /etc/apt/sources. ...
- 20145310 《Java程序设计》第7周学习总结
20145310 <Java程序设计>第7周学习总结 教材学习内容总结 本周主要进行第十二章和第十三章的学习. Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数. 在只 ...
- markdown工作随笔总结
1. 锚点 (使用方法和链接很像) ## 目录 1. [命名](#命名) ....... **[返回顶部](#目录)** ## 命名 ###命名原则 可以从返回顶部回到目录,也可以点击目录的命名跳到命 ...
- centos 查询mysql配置文件位置
具体指令: 1.which mysqld (”which 文件名“ : 搜索命令所在路径及别名) 2./usr/sbin/mysqld --verbose --help | grep -A 1 'D ...
- PHP设计模式(二):工厂方法模式
- docker 修改 mysql 5.7 sql_mode
docker exec -ti {容器ID} /bin/bash 进入容器 apt-get install vim 安装vim 找到 vim /etc/mysql/my.cnf 在 [mysqld ...
- 修饰器Decorator
类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable class MyTestableCl ...