-
鸿鹄论坛上的华为认证h35-211-hcnp-access network题库存在信号不稳定的问题
资源介绍
10.4 不可靠的信号
在早期的U N I X版本中(例如V 7),信号是不可靠的。不可靠在这里指的是,信号可能会
被丢失——一个信号发生了,但进程却决不会知道这一点。那时,进程对信号的控制能力也很
低,它能捕捉信号或忽略它,但有些很需要的功能它却并不具备。例如,有时用户希望通知内
核阻塞一信号——不要忽略该信号,在其发生时记住它,然后在进程作好了准备时再通知它。
这种阻塞信号的能力当时并不具备。
4 . 2 B S D对信号机构进行了更改,提供了被称之为可靠信号的机制。然后,
S V R 3也修改了信号机制,提供了另一套系统 V可靠信号机制。 P O S I X . 1选择了
B S D模型作为其标准化的基础。
早期版本中的一个问题是在进程每次处理信号时,随即将信号动作复置为默认值 (在前面
运行程序1 0 - 1时,我们通过只捕捉每种信号各一次避免了这一点)。以下是早期版本中关于如
何处理中断信号的经典实例的代码:
由于早期的C语言版本不支持ANSI C的v o i d数据类型,所以将信号处理程序说明为 i n t类型。
这种代码段的一个问题是:在信号发生之后到信号处理程序中调用 s i g n a l函数之间有一个
时间窗口。在此段时间中,可能发生另一次中断信号。第二个信号会造成执行默认动作,而对
中断信号则是终止该进程。这种类型的程序段在大多数情况下会正常工作,使得我们认为它们
正确,而实际上却并不是如此。
这些早期版本的另一个问题是:在进程不希望某种信号发生时,它不能关闭该信号。进程
能做的就是忽略该信号。有时希望通知系统“阻止下列信号发生,如果它们确实产生了,请记
住它们。”这种问题的一个经典实例是下列程序段,它捕捉一个信号,然后设置一个表示该信
号已发生的标志:
2 0 6 U N I X环境高级编程
下载