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 ...
随机推荐
- linux中uptime命令获取主机运行时间和查询系统负载信息
系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系 ...
- HDU2189 来生一起走
好久没发博客了,最近遇到以下奇葩错误,不明觉厉,忍不住发一篇 /*母函数,因为要求的是素数,那么先打一个素数表,所有的因子都是素数构成 但是遇到一个奇葩事,当num初值取1,结果就出不来,运行了好久 ...
- PHP(Mysql/Redis)消息队列的介绍及应用场景案例
在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我 ...
- 分享个基于 Node.js + React 的博客系统
是使用 ES2015+ 特性写的,使用了 ThinkJS 框架,后台使用了 React. 完全使用 Markdown 来写文章,还可以把文章推送到团队博客系统中(团队博客也需要使用该系统). 项目地址 ...
- windows上面非常好用的辅助软件
1.everything 快速查找本地文件 下载地址:http://www.voidtools.com/
- 1.1_Django简介及安装
Django的安装 Django安装 文档:https://docs.djangoproject.com/en/1.8/ pip install django 可以到这个网站查看可用的django版本 ...
- java类库字符串操作
在java类库中,java给我们提供了字符串几个特别的操作,分别是String,Stringbuffer,Stringbuilder等.下面就对这几个类做一个简单的介绍.首先,我们先了解一下Strin ...
- LeetCode——Unique Paths
Question A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram be ...
- 分词工具比较及使用(ansj、hanlp、jieba)
一.分词工具 ansj.hanlp.jieba 二.优缺点 1.ansj 优点: 提供多种分词方式 可直接根据内部词库分出人名.机构等信息 可构造多个词库,在分词时可动态选择所要使用的词库缺点: 自定 ...
- 关于Vue的component制作dialog组件
其实原理很简单,兴个粟子, 点击按钮出现 dialog 弹出杠, 将dialog做成一个组件,components/dialog.vue 就是在components里面新建一个vue.将这个vue做为 ...