• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Linux下semop等待信号时出现Interrupted System Call错误(EINTR)解决方法

Linux下semop等待信号时出现Interrupted System Call错误(EINTR)解决方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了Linux下semop等待信号时出现Interrupted System Call错误(EINTR)解决方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
错误现象:(semop函数调用,strerror(errno)输出结果)
Interrupted system call
平台:RedHat Linux

LINUX文档关于EINTR的描述是这样子的:
  While blocked in this system call, the process caught a signal.
UNIX文档[IEEE Std 1003.1-2008]关于EINTR的描述是这样子的:
  The semop() function was interrupted by a signal.

这样的两句话如果关从字面上理解的话,就是在semop等待的过程中出现INTR信号。
可是,错误的出现需要解决,错误的原因一般是由程序员写的代码造成的。
经过调试输出定位问题原因,终于找到了问题所有:
当semop正在等待资源时,如果这个时候,该进程中某线程使用system调用SHELL函数时,semop立即返回,并且错误号为EINTR,错误信息如上。别看这样一个小问题,在我的系统中,由于使用了多种手段来实现IPC(进程内通信),要打到原因是由于一个system的调用就不是那么简单了。

[因为网络上这个问题解决方案暂时没有找到,希望能给他人帮助]

该错误我在GOOGLE上搜了一些贴子,有一位仁兄曾说过:由于死锁导致
因为信号量本身就是防止出现死锁。我特意做了一下实验,使用一个互斥变量和一个信号量,以及两个信号量,以不同顺序,以实现死锁,可是系统并未出现我期望的“Interrupted system call”,而只是一味的等待。

今天在看《UNIX网络编程第1卷 套接口API》时,看到了这样的一句话,让我理解了为什么会出现这个错误,原文如下:
“适用于慢系统调用的基本规则是:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。有些内核自动重启某些被中断的系统调用。”
在这里,慢系统调用(slow system call)在书中是指类似accept之类的引起阻塞的函数,而上文讨论过的semop函数,我想应该也是这一类的,所以当现现EINTR信号时,该系统调用被中断,并返回错误,错误号为:EINTR,我们就可以从这个错误号来重新启动我们的系统调用。
</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28关于C++中虚拟继承的一些总结分析
  • 2017-05-28C++去除输入行中空白的方法
  • 2017-05-28浅析设计模式中的代理模式在C++编程中的运用
  • 2017-05-28VC WinExec打开指定程序或者文件的方法
  • 2017-05-28C语言之free函数以及野指针介绍
  • 2017-05-28用C++实现队列的程序代码
  • 2017-05-28C++ 基础编程之十进制转换为任意进制及操作符重载
  • 2017-05-28C语言中打印特殊图案的实现代码
  • 2017-05-28用C实现PHP扩展 Fetch_Url 类数据抓取的方法
  • 2017-05-28详解C++设计模式编程中策略模式的优缺点及实现

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++基于对话框的程序的框架实例
    • 教你5分钟轻松搞定内存字节对齐
    • 浅谈2路插入排序算法及其简单实现
    • 解析C++中四种强制类型转换的区别详解
    • 浅谈c++构造函数问题,初始化和赋值问题
    • 深入解析C++编程中的运算符重载
    • 详解C 语言项目中.h文件和.c文件的关系
    • C语言之字符串模糊查询方法的实现
    • 用C语言程序判断大小端模式
    • 利用C语言实现顺序表的实例操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有