求助:信号 --13 进程中断

bankcoder 2005-09-22 11:07:03
信号 --13 进程中断
~~~~~~~~~~~~~~~~~~~~~~~~~
两台AIX服务器在socket通讯过程中,发送端服务器报了上述错误。
求助各位这是一个什么现象,怎么造成的呢?
由于没有查到有关资料,故在次求助。

谢谢。
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoxianfeng 2005-09-22
  • 打赏
  • 举报
回复
学习
bankcoder 2005-09-22
  • 打赏
  • 举报
回复
讨论关于利用select()检测对方Socket关闭的问题:

仍然是本地Socket有东东可读,因为对方Socket关闭时,会发一个关闭连接
通知报文,会马上被select()检测到的。关于TCP的连接(三次握手)和关
闭(二次握手)机制,敬请参考有关TCP/IP的书籍。

不知是什么原因,UNIX好象没有提供通知进程关于Socket或Pipe对方关闭的
信号,也可能是cpu所知有限。总之,当对方关闭,一执行recv()或read(),
马上回返回-1,此时全局变量errno的值是115,相应的sys_errlist[errno]
为"Connect refused"(请参考/usr/include/sys/errno.h)。所以,在上
篇的for(;;)...select()程序块中,当有东西可读时,一定要检查recv()或
read()的返回值,返回-1时要作出关断本地Socket的处理,否则select()会
一直认为有东西读,其结果曾几令cpu伤心欲断针脚。不信你可以试试:不检
查recv()返回结果,且将收到的东东(实际没收到)写至标准输出...
在有名管道的编程中也有类似问题出现。具体处理详见拙作:发布一个有用
的Socket客户方原码。

至于主动写Socket时对方突然关闭的处理则可以简单地捕捉信号SIGPIPE并作
出相应关断本地Socket等等的处理。SIGPIPE的解释是:写入无读者方的管道。
在此不作赘述,请详man signal。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
从上述内容看,应该是我的接收服务器关闭了管道。
继续努力:)
bankcoder 2005-09-22
  • 打赏
  • 举报
回复
POSIX 定义的信号
===============================================================================
信号 值 动作 注释
-------------------------------------------------------------------------
SIGHUP 1 A Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 A Interrupt from keyboard
SIGQUIT 3 A Quit from keyboard
SIGILL 4 A Illegal Instruction
SIGABRT 6 C Abort signal from abort(3)
SIGFPE 8 C Floating point exception
SIGKILL 9 AEF Kill signal
SIGSEGV 11 C Invalid memory reference
SIGPIPE 13 A Broken pipe: write to pipe with no readers
SIGALRM 14 A Timer signal from alarm(2)
SIGTERM 15 A Termination signal
SIGUSR1 30,10,16 A User-defined signal 1
SIGUSR2 31,12,17 A User-defined signal 2
SIGCHLD 20,17,18 B Child stopped or terminated
SIGCONT 19,18,25 Continue if stopped
SIGSTOP 17,19,23 DEF Stop process
SIGTSTP 18,20,24 D Stop typed at tty
SIGTTIN 21,21,26 D tty input for background process
SIGTTOU 22,22,27 D tty output for background process
-------------------------------------------------------------------------------
* 信号值是 Linux 系统在不同平台上的取值, 第一个数对 Alpha 和 Sparc 有效, 中
间的数对 i386 和 PowerPC 有效, 最后一个数对 MIPS 有效. "-" 表现缺少该信号.

* A: 默认动作是终止进程
* B: 默认动作是忽略信号
* C: 默认动作是 core 转储
* D: 默认动作是停止进程
* E: 信号不能被捕获
* F: 信号不能被忽略
===============================================================================

上述这个动作A可以修改吗?
bankcoder 2005-09-22
  • 打赏
  • 举报
回复
查到这样的内容:
SIGPIPE 13 A Broken pipe: write to pipe with no readers
yyy790601 2005-09-22
  • 打赏
  • 举报
回复
写入的socket关闭了。

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧