错误现象:(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,我们就可以从这个错误号来重新启动我们的系统调用。
Linux下semop等待信号时出现Interrupted System Call错误(EINTR)解决方法
2020-12-09 14:36Linux教程网 Linux
本篇文章是对在Linux下semop等待信号时出现Interrupted System Call错误(EINTR)的解决方法进行了详细的分析介绍,需要的朋友参考下
延伸 · 阅读
- 2024-11-03晨报:《龙腾4》Steam“多半好评” 《Apex》不再支
- 2022-03-11在Linux下通过命令行打包Android应用的方法
- 2022-03-10这个 Linux 图形计算器让数学很有趣
- 2022-03-10Linux下部署springboot项目的方法步骤
- 2022-03-10linux中把.c的文件编译成.so文件
- 2022-03-10Linux服务器下安装配置Nginx的教程
- Linux
Linux crontab 命令的使用
这篇文章主要介绍了Linux crontab 命令的使用,帮助大家更好的理解和学习Linux系统,感兴趣的朋友可以了解下...
- Linux
Linux怎么设置环境变量
本文主要讲解如何在Linux系统中设置环境变量。当您在Linux命令行上键入命令时,您实际是在告诉shell运行指定名称的可执行文件。在Linux中,这些可执行程...
- Linux
在Linux系统下更改桌面分辨率的方法
这篇文章主要介绍了在Linux系统下更改桌面分辨率的方法,需要的朋友可以参考下 ...
- Linux
终端基础:Linux 终端中的目录切换
Linux 的 cd 命令让你可以轻松切换文件夹(即目录)。只需提供你要切换到的文件夹路径即可。 cd path_to_directory 然而对于 Linux 新人来说,可能会在路径的指...
- Linux
深入理解Linux修改hostname(推荐)
这篇文章主要介绍了深入理解Linux修改hostname(推荐),具有一定的参考价值,有兴趣的可以了解一下。...
- Linux
记一次生产线系统磁盘扩容的步骤之超详细的lvm步骤
数据库负责人反馈ogg同步中断,监控告警触发系统磁盘空间不足,需尽快扩容。下面介绍扩容的详细步骤。...
- Linux
Linux平台下生成C语言数据结构关系图
作为一名Linux系统下的C语言开发,经常需要阅读源码,但是有些源码实在是难以阅读,各种庞大的结构体交杂,分分钟把你绕晕,让你头昏眼花,迟迟无法...
- Linux
linux查找可执行文件的方法
这篇文章主要介绍了linux查找可执行文件的方法,需要的朋友可以参考下 ...