您的位置:首页 > 编程语言

<<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程序设计极其重要.

本章内容极其繁杂,大多是函数,这里并没有列举,用到再查把,目前浏览全文有个印象即可.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix 编程 异步