CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  系统维护与使用区

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

楼主bankcoder(下半生我信佛)2005-09-22 11:07:03 在 Linux/Unix社区 / 系统维护与使用区 提问

信号   --13   进程中断  
  ~~~~~~~~~~~~~~~~~~~~~~~~~  
  两台AIX服务器在socket通讯过程中,发送端服务器报了上述错误。  
  求助各位这是一个什么现象,怎么造成的呢?  
  由于没有查到有关资料,故在次求助。  
   
  谢谢。 问题点数:20、回复次数:5Top

1 楼bankcoder(下半生我信佛)回复于 2005-09-22 11:08:47 得分 0

查到这样的内容:  
  SIGPIPE             13                 A             Broken   pipe:   write   to   pipe   with   no   readers  
  Top

2 楼bankcoder(下半生我信佛)回复于 2005-09-22 11:10:10 得分 0

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可以修改吗?Top

3 楼bankcoder(下半生我信佛)回复于 2005-09-22 11:20:21 得分 0

讨论关于利用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。    
   
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`  
  从上述内容看,应该是我的接收服务器关闭了管道。  
  继续努力:)Top

4 楼gaoxianfeng(高)回复于 2005-09-22 12:37:38 得分 10

学习Top

5 楼yyy790601(发呆的鱼)回复于 2005-09-22 15:35:56 得分 10

写入的socket关闭了。Top

相关问题

  • cpu的中断和进程管理有谁负责?
  • 进程、线程、中断,它们之间的关系与区别
  • 含中断的驱动程序唤醒进程的问题?
  • 中断DLLHOST进程引发的ASP页面访问错误
  • 高分求助:如何截获父进程或子进程结束信号?
  • 父进程与子进程的信号屏蔽表可以不一样吗?
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???
  • 请问在asp.net中,怎样中断正在运行的全部进程?
  • 高人指点C#中如何用信号量来实现进程的互斥
  • 哪位高手可以解释一下为什么Linux下的socket函数recv(),不被信号中断掉?

关键词

  • 信号
  • 服务器
  • socket
  • sigpipe
  • 进程
  • 关闭
  • signal
  • pipe
  • 管道
  • 对方

得分解答快速导航

  • 帖主:bankcoder
  • gaoxianfeng
  • yyy790601

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo