http://blog.csdn.net/ly21st http://ly21st.blog.chinaunix.net
分类: LINUX
2011-09-18 15:47:46
信号是发生某事件时对进程的通知,有时称为软中断。
进程可以:
1)由一进程发往另一进程(或本身);
2)由内核发往某进程。
5.13 SIGPIPE信号当一个进程向接收了RST的套接口进行写操作时,内核给该进程发一个SIGPIPE信号。该信号的缺省行为就是终止进程,所以,进程必须捕获它以免不情愿地被终止。
进程无论是捕获了该信号并从其信号处理程序返回,还是不理会该信号,写操作都返回EPIPE错误。
处理SIGPIPE的建议方法取决于它发生时应用程序想做什么。如果没有特殊的事情需做,则将信号处理办法简单地设置为SIG_IGN,并假设后续的输出操作将捕获EPIPE错误并终止。如果信号出现时需采取特殊措施,那么就必须捕获该信号,以免在信号处理程序中执行所有期望的动作。但必须意识到,如果使用了多个套接口,该信号的递交无法告诉我们是那个套接口出的错。如果我们需要知道是哪个write出了错,那么必须不理会该信号,要么从信号处理程序返回后再处理来自write的EPIPE。
5.16 服务器主机关机当Unix系统关机时,一般是由init进程给所有进程发信号SIGTERM(我们可捕获此信号),等待一段固定时间(常常是5-20秒),然后给还在运行的所有进程发信号SIGKILL(此信号我们不嫩捕获)。我们必须在客户上使用函数select或poll,使得客户在服务器进程开始终止时就检测到。
5.18 数据格式有两个常用方法来解决数据格式问题:
1)把所有的数值数据作为文本串来传递,当然这也要以两个主机由相同的字符集为基础;
2)显式定义所支持数据类型的二进制格式(位数,大端或小端),在客户与服务器之间以此格式传递所有数据。远程过程调用软件包常用此技术。