免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1769 | 回复: 2
打印 上一主题 下一主题

请教:关于信号的递送(delivery) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-30 13:16 |只看该作者 |倒序浏览
本帖最后由 sinco449 于 2010-04-30 13:21 编辑

在APUE中关于信号的递送(delivery)的定义是:“在产生了信号时,内核通常在进程表中设置某种形式的一个标志。当对信号做了这种动作时,我们说向一个进程递送了一个信号。”
其他书中(比如GNU/Linux编程指南)对信号的递送(delivery)是这么定义的:“当进程对发送给它的信号采取措施时,就称该信号被递送”。
对于第一种定义,我是这么理解的:“递送,是指内核将信号发送到进程。进程如何处理该信号,则不包括在递送阶段里。”
对于第二种定义,我理解为:“递送,是指进程对已经接收到的信号进行处理。”
两种说法,共同点是“进程都接收到了信号”,纠结点是“是否对信号进行了处理”。
其实,我更倾向于第一种说法,因为它最贴切“delivery”的字面意思,就仅仅是传递信号信号而已。

请问,到底应该怎么理解“信号的递送”。如果该术语理解不清的话,对后面的一堆“挂起”、“阻塞”等术语的理解带来了困扰。
希望哪位高手出来解释解释,最好能详细说说下信号机制的流程。

论坛徽章:
0
2 [报告]
发表于 2010-04-30 13:43 |只看该作者
本帖最后由 niko_zju 于 2010-04-30 13:48 编辑

原文如下:
We need to define some of the terms used throughout our discussion of signals. First, a signal is generated for a process (or sent to a process) when the event that causes the signal occurs. The event could be a hardware exception (e.g., divide by 0), a software condition (e.g., an alarm timer expiring), a terminal-generated signal, or a call to the kill function. When the signal is generated, the kernel usually sets a flag of some form in the process table.

We say that a signal is delivered to a process when the action for a signal is taken. During the time between the generation of a signal and its delivery, the signal is said to be pending.

A process has the option of blocking the delivery of a signal. If a signal that is blocked is generated for a process, and if the action for that signal is either the default action or to catch the signal, then the signal remains pending for the process until the process either (a) unblocks the signal or (b) changes the action to ignore the signal. The system determines what to do with a blocked signal when the signal is delivered, not when it's generated. This allows the process to change the action for the signal before it's delivered. The sigpending function (Section 10.13) can be called by a process to determine which signals are blocked and pending.


我的理解是信号得到处理了就是递送完成了。。。。。
在产生了信号时,内核通常在进程表中设置某种形式的一个标志。当对信号做了这种动作时,我们说向一个进程递送了一个信号。


这个翻译明显是有问题的。。。。。

看书还得参照原版看的。。。。瞎翻译害人

论坛徽章:
0
3 [报告]
发表于 2010-04-30 14:01 |只看该作者
本帖最后由 sinco449 于 2010-04-30 14:04 编辑

回复 2# niko_zju


    恩,翻看一一下英文版的APUE,发现
We say that a signal is delivered to a process when the action for a signal is taken. During the time between the generation of a signal and its delivery, the signal is said to be pending
是单独一个段落的,“the action for a signal”明显应该译为“对该信号的处理”。
而该书中本版的作者非得将这段话和上一段落拼到一起,以为“the action for a signal”指的是上一段路末尾的“the kernel usually sets a flag of some form in the process table”。
作者太不够严谨了,应该拉出去打50大板。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP