AIX 上的 bash 偶尔出现错误:系统调用中断

AIX 上的 bash 偶尔出现错误:系统调用中断

我在 AIX 上的 bash 中遇到进程替换问题 这种情况很少发生,显然仅在服务器加载时发生。

错误消息示例如下:

line 9: /tmp//sh-np-7841523: Interrupted system call

在进一步研究我的脚本之前,我想知道您是否已经遇到过进程替换问题。或者获取有关实施流程替换时需要遵守的一些可能建议的意见。

注意:这个简单的脚本可能会生成上述错误:

#!/bin/bash
read var < <(echo)

但我强调这一点:这种错误是非常罕见的。无法系统地重现。测试脚本的服务器是生产服务器。

答案1

检查您是否使用最新版本的 bash。如果是,请报告错误;如果您安装了现有的二进制文件,请务必准确指出您从哪里获得 bash 二进制文件;如果您自己编译了 bash,请务必准确指出您使用的编译器和编译时配置以及从哪里获得源代码。还要提及您的 AIX 的确切版本和硬件架构。当然,请提及如何重现该错误,就像您在这里所做的那样。


“系统调用中断”并不是真正的错误。它是一个错误状态 ( EINTR),告诉调用者系统调用根本没有执行(而不是尝试执行但失败)。应用程序处理的正常方法EINTR是重新运行系统调用,可能是在执行一些其他处理之后,例如运行信号处理程序。EINTR存在的目的是让应用程序在进行阻塞系统调用时有机会执行紧急任务。你可以阅读何时检查 EINTR 并重复函数调用?使用可重入函数实现更安全的信号处理更多背景阅读。

EINTRBash在一个意想不到的地方看到了系统调用返回的结果。它以通用方式将其报告为错误。这是一个错误,可能是由于操作系统的怪癖或错误造成的。

相关内容