文件名称:不可靠的信号-鸿鹄论坛_华为认证h35-211-hcnp-access network题库
文件大小:18.16MB
文件格式:PDF
更新时间:2024-07-29 08:58:55
UNIX 环境高级编程 linux
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环境高级编程 下载