文件名称:信号的概念-数据流图到模块结构图的直接转换方法
文件大小:5.82MB
文件格式:PDF
更新时间:2024-07-12 01:23:44
APUE UNIX
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 )来判别是否发生了一个信号,而是必须告诉内核“在此信号发生时,请