<<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程序设计极其重要.
本章内容极其繁杂,大多是函数,这里并没有列举,用到再查把,目前浏览全文有个印象即可.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值