ICE 默认 IO 错误处理程序执行 exit(), pid = 11281, errno = 4

Posted

技术标签:

【中文标题】ICE 默认 IO 错误处理程序执行 exit(), pid = 11281, errno = 4【英文标题】:ICE default IO error handler doing an exit(), pid = 11281, errno = 4 【发布时间】:2014-01-04 10:37:45 【问题描述】:

我们的一个 PyQt 应用程序抛出一个关于 ICEAuthority 的错误,如下所示并退出 -

在查看跟踪时,我们看到以下内容 -

write(25, "\1\0\3\200\3\0\0\0\3\0\0\0\t\0\0\0\10\0\0\0\1\0\0\0\377rtStyle", 32) = 32
read(25, 0x16a67f0, 8) = ? ERESTARTSYS (To be restarted)
— SIGCHLD (Child exited) @ 0 (0) —
write(6, "\0", 1) = 1
rt_sigreturn(0x2) = -1 EINTR (Interrupted system call)
write(2, "ICE default IO error handler doi"..., 69) = 69

这看起来像 ICEAuthority 文件读取操作在处理我们从 PyQt 应用程序生成的进程之一的 SIGCHLD 后未能重新启动。在谷歌上搜索,有很多关于 ICEAuthority 文件失败的报告,人们建议重新启动系统、删除 .ICEAuthority 文件或取消设置 SESSION_MANAGER。我们现在倾向于在 PyQt 应用程序中取消设置 SESSION_MANAGER。但我想了解为什么该操作未能重新启动 ICEAuthority 文件的读取操作。这是 gnome-session 代码中的错误吗?有人知道吗?

我还想提一下,我尝试将 SA_RESTART 设置为 false 以使 SIGCHLD 句柄重新启动操作。这失败了。

请在下面找到我们的系统详细信息 -

Linux nyc-nx-l01.schrodinger.com 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

CentOS 6.4 版(最终版)

【问题讨论】:

"SA_RESTART 为 false 以使 SIGCHLD 句柄重新启动操作" 您必须设置该标志,而不是清除它,以便自动重新启动系统调用。它可能是覆盖您自己的信号处理程序的其他地方的代码。似乎某处的某些代码无法正确处理 EINTR,问题是哪个代码。 【参考方案1】:

在 Ubuntu 上启动“keepassx”时,我收到了同样的错误消息。删除我的 ~/.ICEauthority 文件修复了它。只删了一次,以后再也没出过问题。

【讨论】:

删除~/.ICEauthority有没有潜在危险? 我不知道。我不知道它有什么作用。我没有注意到任何不良影响。【参考方案2】:

在我的 linux 机器上 USB 不可读,然后 kile 也显示错误 “ICE 默认 IO 错误处理程序执行 exit(), pid = 11212, errno = 0”。

删除文件 .ICEauthority,对我有用。

【讨论】:

【参考方案3】:

我认为删除 .ICEauthority 文件没有问题。该文件夹可能包含来自私人跟踪器或其他东西的种子 cookie。我仍然相信 ktorrent 是最好的 torrent 客户端之一,因为它提供了暂停 torrent 并尝试加载活动 torrent 的超时时间。换句话说,客户端总是试图确保它正在使用活跃的 torrent 源。

【讨论】:

以上是关于ICE 默认 IO 错误处理程序执行 exit(), pid = 11281, errno = 4的主要内容,如果未能解决你的问题,请参考以下文章

Shell命令的退出状态及错误检查

处理严重错误的方式是不友好的 exit() 吗?

错误处理程序 - Exit Sub 与 End Sub

System.exit 的替代方案,可以将错误代码发送到批处理或 shell

处理WIX警告的正确方法:LGHT1076:ICE48

exit() 和 abort() 有啥区别?