<<UNIX环境高级编程>>之第十章理解
2017-01-25 17:49
375 查看
第十章:信号
一.引言
信号是软件中断.信号提供了一种处理异步事件的方法:终端用户键入中断键,则会通过信号机构停止一个程序.
什么是异步事件:
简单点来说,就是,你一边看书,又一边在听歌。两者之间互不干扰。
编程中最常见的异步事件,就是ajax调用。页面没有刷新,但某个局部已经更新。
你打开淘宝,你会发现,页面先加载,但图片过一会才加载。这就是异步的应用。
二.信号的概念
每个信号都有一个名字,这些名字都以三个字符SIG开头.在头文件:signal.h中,这些信号都被定义为正整数(信号编号 > 0).
信号是异步事件的经典实例.产生信号的事件对进程而言是随机出现的.进程不能只是测试一个变量来判别是否发生了一个信号,而是必须告诉内核"在此信号发生时,请执行下列操作".
三.signal函数
unix信号机制最简单的界面是signal函数.
四.中断的系统调用
信号中断的是系统调用而不是函数.
五.可再入函数
作用是进程正在运行,进程捕捉到信号并继续执行的时候,它首先执行该信号处理程序中的指令.如果信号处理程序结束返回(没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列.但在信号处理程序中,不能判断捕捉到信号时进程执行到何处.
然后有一个可再入函数表,如果是可再入的函数,则信号运行完后可以继续运行进程的函数,如果不在可再入函数表中,那么就可能会发生故障.
六.信号集
一个能表示多个信号的数据类型称作信号集(signal set)
七.作业控制信号
1.SIGCHLD 子进程已停止或终止
2.SIGCONT 如果进程已停止,则使其继续运行.
3.SIGSTOP 停止信号(不能被捕捉或忽略).
4.SIGTSTP 交互停止信号.
5.SIGTTIN 后台进程组的成员读控制终端
6.SIGTTOU 后台进程组的成员写控制终端.
大多数应用程序并不处理这些信号—交互式shell通常做处理这些信号的所有工作.当键入挂起字符(通常是ctrl-z)时,SIGTSTP被送至后台进程组的所有进程.当通知shell在前台或后台恢复一个作业时,shell向作业中的所有进程发送SIGCONT信号.
在作业控制信号间有某种相互作用.当对一个进程产生四种停止信号(SIGTSTP,SIGSTOP,SIGTTIN或SIGTTOU)中的任意一种时,对该进程的任一未决的SIGCONT信号就被丢弃.
信号用于很多复杂的应用程序中,理解进行信号处理的原因和方式对于高级unix程序设计极其重要.
本章内容极其繁杂,大多是函数,这里并没有列举,用到再查把,目前浏览全文有个印象即可.
一.引言
信号是软件中断.信号提供了一种处理异步事件的方法:终端用户键入中断键,则会通过信号机构停止一个程序.
什么是异步事件:
简单点来说,就是,你一边看书,又一边在听歌。两者之间互不干扰。
编程中最常见的异步事件,就是ajax调用。页面没有刷新,但某个局部已经更新。
你打开淘宝,你会发现,页面先加载,但图片过一会才加载。这就是异步的应用。
二.信号的概念
每个信号都有一个名字,这些名字都以三个字符SIG开头.在头文件:signal.h中,这些信号都被定义为正整数(信号编号 > 0).
信号是异步事件的经典实例.产生信号的事件对进程而言是随机出现的.进程不能只是测试一个变量来判别是否发生了一个信号,而是必须告诉内核"在此信号发生时,请执行下列操作".
三.signal函数
unix信号机制最简单的界面是signal函数.
四.中断的系统调用
信号中断的是系统调用而不是函数.
五.可再入函数
作用是进程正在运行,进程捕捉到信号并继续执行的时候,它首先执行该信号处理程序中的指令.如果信号处理程序结束返回(没有调用exit或longjmp),则继续执行在捕捉到信号时进程正在执行的正常指令序列.但在信号处理程序中,不能判断捕捉到信号时进程执行到何处.
然后有一个可再入函数表,如果是可再入的函数,则信号运行完后可以继续运行进程的函数,如果不在可再入函数表中,那么就可能会发生故障.
六.信号集
一个能表示多个信号的数据类型称作信号集(signal set)
七.作业控制信号
1.SIGCHLD 子进程已停止或终止
2.SIGCONT 如果进程已停止,则使其继续运行.
3.SIGSTOP 停止信号(不能被捕捉或忽略).
4.SIGTSTP 交互停止信号.
5.SIGTTIN 后台进程组的成员读控制终端
6.SIGTTOU 后台进程组的成员写控制终端.
大多数应用程序并不处理这些信号—交互式shell通常做处理这些信号的所有工作.当键入挂起字符(通常是ctrl-z)时,SIGTSTP被送至后台进程组的所有进程.当通知shell在前台或后台恢复一个作业时,shell向作业中的所有进程发送SIGCONT信号.
在作业控制信号间有某种相互作用.当对一个进程产生四种停止信号(SIGTSTP,SIGSTOP,SIGTTIN或SIGTTOU)中的任意一种时,对该进程的任一未决的SIGCONT信号就被丢弃.
信号用于很多复杂的应用程序中,理解进行信号处理的原因和方式对于高级unix程序设计极其重要.
本章内容极其繁杂,大多是函数,这里并没有列举,用到再查把,目前浏览全文有个印象即可.
相关文章推荐
- <<UNIX环境高级编程>>之第六章理解
- <<UNIX环境高级编程>>之第三章理解
- <<UNIX环境高级编程>>之第七章理解
- <<UNIX环境高级编程>>之第一章理解
- <<UNIX环境高级编程>>之第五章理解
- <<UNIX环境高级编程>>之第二章理解
- <<UNIX环境高级编程>>apue.h头文件的配置
- <<UNIX环境高级编程>>之第四章理解
- <<UNIX环境高级编程>>学习总结——第四章:文件和目录
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- <<UNIX环境高级编程>>学习总结——第一章:UNIX基础知识
- <<UNIX环境高级编程>>之第九章理解
- <<UNIX环境高级编程>>学习笔记之环境搭建
- <UNIX环境高级编程>--第七章
- apue<<UNIX环境高级编程>>翻译错误罗列
- <UNIX环境高级编程>中的 "apue.h"
- apue.h <<UNIX 环境高级编程>> 第二版 环境配置
- <Unix环境高级编程>apue.h在Fedora14下开发环境搭建
- <转>unix环境高级编程中代码运行问题解决
- <UNIX环境高级编程>--第七章