免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 雨丝风片
打印 上一主题 下一主题

[FreeBSD] 【FreeBSD system programming 】中文翻译计划及所有异义提交处 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2006-02-14 08:59 |只看该作者
原帖由 FinalBSD 于 2006-2-13 19:36 发表
呵呵,我把翻译好的都单独发了帖子了。


老大,我那章还没弄完呢,今天早上又弄了两节,1.5和1.6,已经更新在33楼了。
麻烦你更新一下发布贴,

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
52 [报告]
发表于 2006-02-14 09:10 |只看该作者
原帖由 雨丝风片 于 2006-2-14 08:59 发表


老大,我那章还没弄完呢,今天早上又弄了两节,1.5和1.6,已经更新在33楼了。
麻烦你更新一下发布贴,

呵~这点小事,我来吧.

[ 本帖最后由 congli 于 2006-2-14 09:20 编辑 ]

论坛徽章:
0
53 [报告]
发表于 2006-02-14 09:37 |只看该作者
原帖由 congli 于 2006-2-14 09:10 发表

呵~这点小事,我来吧.


有劳版主了!1.7也弄完了,已更新在33楼。午饭后继续。。。

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
54 [报告]
发表于 2006-02-14 09:45 |只看该作者
原帖由 雨丝风片 于 2006-2-14 09:37 发表


有劳版主了!1.7也弄完了,已更新在33楼。午饭后继续。。。

OK!

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
55 [报告]
发表于 2006-02-14 10:37 |只看该作者
你们动作好快,看来我要加油了^_^

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
56 [报告]
发表于 2006-02-14 14:44 |只看该作者
第四章 高级进程控制和信号

翻译: gvim@chinaunix/bsd

一些说明:
1 很高兴有这个机会参与到这项活动中来。
2 由于英语语言的习惯,文中有不少复杂长句,按照字面翻译出来并不适合中国人的阅读习惯。我在保留文章原意的基础上作了一些语言组织上的调整,将大部分长句子组织成中文擅长的短句型,所以你会发现翻译品一部分内容不是按照原文字面翻译的。
3 考虑到该书的入门引导作用,在原文中一些比较少见的词后面我添加了少许译注,希望减少入门兄弟的负担。
4 由于2中的语言调整和3中的译注,是我的个人行为,可能会有我对 原文理解模糊,概念不清,或是语言组织不顺畅的地方,还请大家一定多多指出来。谢谢。
个人声明:
本翻译品受控于chinaunix BSD翻译小组。如需单独转载,请保留“翻译:gvim@chinaunix/bsd”和以上几点说明。


4.1 高级进程控制和信号
信号:4 a:一种对象,用于传输或负载人类声音之外的信息。

到目前为止,我们已经讨论了进程的创建和其他系统调用。现在是讨论下面这些问题的时候了:你要在多个进程间通讯以获得更好的进程控制粒度,或者要其他程序或操作者用信号通知你的程序。例如,你可能希望你的程序重新读取它的配置文件。或者,你的数据库程序需要在退出之前将事务从主存写入后备存储器,然后再退出。这两个例子可能只是使用信号的很小一部分。虽然已经有套接字,先入先出队列,管道,信号量等多种方式来完成类似的任务,但是我们将把讨论的焦点放在信号和其它进程控制机制上。在现实中,信号和进程控制机制可以提供大部分你所需要的特性和功能。

4.2 信号
信号与硬件中断很相似。当设备需要中断服务的时候它可以产生一个硬件中断来通知CPU。与硬件中断类似的,当进程需要将一些事件通知给其他进程的时候可以使用信号来完成。

大多数Unix系统管理员会比较熟悉SIGHUP信号。当你通过kill命令向后台服务进程发出SIGHUP信号后,大多数进程要么重新读入他们的配置文件要么重新启动。这些信号之中,一些与硬件有直接关系,如SIGFPE(浮点异常),SIGILL(非法指令);其它则是与软件相关,如SIGSYS(未实现的系统调用被调用)。

一旦进程接收到信号之后,该信号的行为与信号本身和进程对它的使用目的两个因素有关。一些信号可以被阻塞,忽略,或者捕获,而另外一些则不可以。如果进程需要捕获一个信号并履行一些相关操作,你可以为进程设定这个特定信号的信号处理句柄。处理句柄仅仅是一个函数,在这个信号被进程接收之后调用。或者更确切的说,处理句柄是一个函数调用,你可以对它进行指派(specify)。

当信号没有指定处理句柄时,将会执行操作系统默认的行为。这些缺省行为可以是从终止进程到完全核心转储等不同的操作。注意,有两个信号不能被捕获或忽略:SIGSTOP和SIGKILL,下面会解释。

在BSD系统中定义的有许多信号;我们讨论在/usr/include/sys/signals.h(译注:在我的FB5.2.1中是signal.h)文件中定义的标准信号。注意, NetBSD系统中定义的信号数量稍微多一点,并且我们没有将它们的讨论放在这里。所以如果需要使用某个下面没有涉及到的信号的时候,请查阅你的系统的头文件。

  1. #define SIGHUP          1       /* hangup */
复制代码

SIGHUP是Unix系统管理员很常用的一个信号。许多后台服务进程在接受到该信号后将会重新读取它们的配置文件。然而,该信号的实际功能是通知进程它的控制终端被断开。缺省行为是终止进程。
  1. #define SIGINT          2       /* interrupt */
复制代码

对于Unix使用者来说,SIGINT是另外一个常用的信号。许多shell的CTRL-C组合使得这个信号被大家所熟知。该信号的正式名字是中断信号。缺省行为是终止进程。
  1. #define SIGQUIT         3       /* quit */
复制代码

SIGQUIT信号被用于接收shell的CTRL-/组合。另外,它还用于告知进程退出。这是一个常用信号,用来通知应用程序从容的(译注:即在结束前执行一些退出动作)关闭。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGILL          4       /* illegal instr. (not reset when caught) */
复制代码

如果正在执行的进程中包含非法指令,操作系统将向该进程发送SIGILL信号。如果你的程序使用了线程技术,或者pointer functions,那么可能的话可以尝试捕获该信号来协助调试。(注意:原文中的use of use of xxx暂时翻译为"使用了xxx技术"(特别感谢 孙轩 szjungle 雨风 三位朋友的指点);另外,偶经常听说functions pointer,对于pointer functions,google了一下,应该是fortran里面的东西,不管怎样,还真不知道,确切含义还请知道的兄弟斧正。)缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGTRAP         5       /* trace trap (not reset when caught) */
复制代码

SIGTRAP这个信号是由POSIX标准定义的,用于调试目的。当被调试进程接收到该信号时,就意味着它到达了某一个调试断点。一旦这个信号被交付,被调试的进程就会停止,并且它的父进程将接到通知。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGABRT         6       /* abort() */
复制代码

SIGABRT提供了一种在异常终止(abort)一个进程的同时创建一个核心转储的方法。然而如果该信号被捕获,并且信号处理句柄没有返回,那么进程不会终止。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGFPE          8       /* floating point exception */
复制代码

当进程发生一个浮点错误时,SIGFPE信号被发送给该进程。对于那些处理复杂数学运算的程序,一般会建议你捕获该信号。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGKILL         9       /* kill (cannot be caught or ignored) */
复制代码

SIGKILL是这些信号中最难对付的一个。正如你在它旁边的注释中看到的那样,这个信号不能被捕获或忽略。一旦该信号被交付给一个进程,那么这个进程就会终止。然而,会有一些极少数情况SIGKILL不会终止进程。这些罕见的情形在处理一个“非中断操作”(比如磁盘I/O)的时候发生。虽然这样的情形极少发生,然而一旦发生的话,会造成进程死锁。唯一结束进程的办法就只有重新启动了。缺省行为是终止进程。
  1. #define SIGBUS          10      /* bus error */
复制代码

如同它的名字暗示的那样,CPU检测到数据总线上的错误时将产生SIGBUS信号。当程序尝试去访问一个没有正确对齐的内存地址时就会产生该信号。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGSEGV         11      /* segmentation violation */
复制代码

SIGSEGV是另一个C/C++程序员很熟悉的信号。当程序没有权利访问一个受保护的内存地址时,或者访问无效的虚拟内存地址(脏指针,dirty pointers,译注:由于没有和后备存储器中内容进行同步而造成。关于野指针,可以参见http://en.wikipedia.org/wiki/Wild_pointer 的解释。)时,会产生这个信号。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGSYS          12      /* non-existent system call invoked */
复制代码

SIGSYS信号会在进程执行一个不存在的系统调用时被交付。操作系统会交付该信号,并且进程会被终止。缺省行为是终止进程,并且创建一个核心转储。
  1. #define SIGPIPE         13      /* write on a pipe with no one to read it */
复制代码

管道的作用就像电话一样,允许进程之间的通信。如果进程尝试对管道执行写操作,然而管道的另一边却没有回应者时,操作系统会将SIGPIPE信号交付给这个讨厌的进程(这里就是那个打算写入的进程)。缺省行为是终止进程。

(to be continued...)

[ 本帖最后由 gvim 于 2006-2-17 16:46 编辑 ]

论坛徽章:
0
57 [报告]
发表于 2006-02-14 15:18 |只看该作者
偶的1.8也弄完了,已更新,

论坛徽章:
0
58 [报告]
发表于 2006-02-14 15:19 |只看该作者
原帖由 gvim 于 2006-2-14 14:44 发表
第四章 高级进程控制和信号

翻译: gvim@chinaunix/bsd



4.1 高级进程控制和信号
信号:4 a:一种对象,用于 ...


兄弟的动作也不慢啊!

论坛徽章:
0
59 [报告]
发表于 2006-02-14 15:44 |只看该作者
原帖由 gvim 于 2006-2-14 14:44 发表
我们讨论在/usr/include/sys/signals.h(译注:在我的FB5.2.1中是signal.h)
[


你对了,作者错了,这个地方就应该是signal.h。这本书作者应该没有进行仔细的修订,我在翻译过程中已经帮他修正了几处明显的打字或排版错误。

论坛徽章:
0
60 [报告]
发表于 2006-02-15 08:58 |只看该作者
今天早上把1.9也弄完了,已更新至33楼和发布贴,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP