-
Cadence入门教程中关于信号的概念
资源介绍
10.2 信号的概念
首先,每个信号都有一个名字。这些名字都以三个字符 S I G开头。例如,S I G A B RT是夭折
信号,当进程调用a b o r t函数时产生这种信号。S I G A L R M是闹钟信号,当由a l a r m函数设置的时
间已经超过后产生此信号。V 7有1 5种不同的信号,S V R 4和4 . 3 + B S D均有3 1种不同的信号。
在头文件< s i g n a l . h >中,这些信号都被定义为正整数(信号编号)。没有一个信号其编号为
0。在1 0 . 9节中将会看到k i l l函数,对信号编号0有特殊的应用。P O S I X . 1将此种信号编号值称为
空信号。
很多条件可以产生一个信号。
• 当用户按某些终端键时,产生信号。在终端上按D E L E T E键通常产生中断信号(S I G I N T)。
这是停止一个已失去控制程序的方法。(第11章将说明此信号可被映射为终端上的任一字符。)
• 硬件异常产生信号:除数为0、无效的存储访问等等。这些条件通常由硬件检测到,并将
其通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。例如,对执行一个无
效存储访问的进程产生一个S I G S E G V。
• 进程用k i l l ( 2 )函数可将信号发送给另一个进程或进程组。自然,有些限制:接收信号进程
和发送信号进程的所有者必须相同,或发送信号进程的所有者必须是超级用户。
• 用户可用k i l l ( 1 )命令将信号发送给其他进程。此程序是 k i l l函数的界面。常用此命令终止
一个失控的后台进程。
• 当检测到某种软件条件已经发生,并将其通知有关进程时也产生信号。这里并不是指硬
件产生条件(如被 0除),而是软件条件。例如 S I G U R G (在网络连接上传来非规定波特率的数
据)、S I G P I P E (在管道的读进程已终止后一个进程写此管道 ),以及S I G A L R M (进程所设置的闹
钟时间已经超时 )。
信号是异步事件的经典实例。产生信号的事件对进程而言是随机出现的。进程不能只是测
试一个变量 (例如e r r n o )来判别是否发生了一个信号,而是必须告诉内核“在此信号发生时,请
- 上一篇: +BSD实现-cadence入门教程
- 下一篇: signal函数-cadence入门教程