第 7 章
进程间的通信
2
本章重点
进程通信中信号概念及信号处理
进程间的管道通信编程
进程间的内存共享编程
3
7.1.1 信号及其使用
信号是在软件层次上对中断机制的一种模拟,
是一种异步通信方式。信号可以直接进行用户
空间进程和内核进程之间的交互,内核进程也
可以利用它来通知用户空间进程发生了哪些系
统事件。
信号事件的发生有两个来源:
① 硬件来源,如按下了键盘 Delete 键或者鼠标单击,
通常产生中断信号( SIGINT )或者其它硬件故障。
② 软件来源,如使用系统调用或者是命令发出信号。
最常用发送信号的系统函数是 kill 、 raise 、 alarm 、
setitimer 、 sigation 和 sigqueue 函数,软件来源还
包括一些非法运算等操作。
4
7.1.1 信号及其使用
例 7.1 :列出系统所支持的所有信号列表。
( 1 )使用系统命令: [root@localhost root]#kill -l
( 2 )分析:
SIG 信号
SIGRTMIN 信号是从 UNIX 系统中继承下来的称为不可靠信号
( 也称为非实时信号 ) 。
SIGRTMAX 是为了解决前面“不可靠信号”问题而进行更改和扩
充的信号,称为可靠信号 ( 也称为实时信号 ) 。
可靠信号 ( 实时信号 ) :支持排队,发送用户进程一次就注册一
次,发现相同信号已经在进程中注册,也要再注册。
不可靠信号 ( 非实时信号 ) :不支持排队,发送用户进程判断后
注册,发现相同信号已经在进程中注册,就不再注册,忽略该
信号。前面显示的 31 种“ SIG” 开头的,也属于非实时信号。
5
7.1.1 信号及其使用
一旦有信号产生,用户进程对信号的响应有 3 种方式:
① 执行默认操作。 Linux 对每种信号都规定了默认操作。
② 捕捉信号。定义信号处理函数,当信号发生时,执行相应的处
理函数。
③ 忽略信号。不希望接收到的信号对进程的执行产生影响,而让
进程继续进行时,可以忽略该信号,即不对信号进程任何处理。