首页 > 代码库 > APUE学习笔记——10 信号(一)——信号介绍
APUE学习笔记——10 信号(一)——信号介绍
信号的基本概念
信号是软件中断,信号提供了解决异步时间的方法。
每一中信号都有一个名字,信号名以SIG开头。
产生信号的几种方式
很多条件可以产生信号:
终端交互:用户按下某一些按键,如ctl+c,会产生信号。
硬件异常:如除数为0,内存引用错误。
kill(2)函数:将信号发送到一个进程或者进程组
kill(1)命令:该命令为kill(2)函数的接口。用于终止失控的后台in成。
检测到某软件条件发生:如网络连接上传来外数据(产生SIGURG信号),闹钟超时(产生SIGALRM信号)
处理信号的几种方式:
忽略此信号:大部分信号可以忽略,但SIGKILL和SIGSTOP信号不能忽略。另,如果忽略硬件异常(如除数为0)信号,则运行结果未知。
捕捉此信号:通知内核在某信号发生时,调用一个用户函数。SIGKILL和SIGSTOP信号不能被捕捉。如
默认动作:执行系统默认动作,本文后面附带常见信号默认动作的表格。大部分信号的默认动作时终止进程。
SIGKILL和SIGSTOP信号既不能被忽略也不能被捕捉,因为这两个信号向内核或者超级用户提供了终止或停止信号的可靠方法。
信号列表:
下面附上APUE Figure 10.1中信号列表的表格:
在SUS列中,?表示该信号为POSIX.1的基础规范部分,XSI表示该信号为XSI拓展选项。
在Default action列中,terminate+core表示进程存储映像被存放在当前目录的一个我们称之为core的文件中。core文件可以用于调试。关于不产生core文件的条件请参考http://blog.csdn.net/windeal3203/article/details/39289059
附上每一个信号的具体介绍:来源: <http://baike.baidu.com/view/64630.htm?fr=aladdin>
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 信号(一)——信号介绍
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。