为什么我的应用程序处于可中断状态并挂起?

为什么我的应用程序处于可中断状态并挂起?

我在 Ubuntu 10.04 LTS Server 上运行了一个以前运行良好的 GTK 应用程序。它突然开始无缘无故地处于可中断状态 (Sl+)。以下是 strace 的片段:

poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}], 2, 0) = 0 (Timeout)
poll([{fd=5, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=5, revents=POLLOUT}])
writev(5, [{"\2\30\4\0\224\4\240\0\0@\0\0\37\0\240\0\2\4\4\0\224\4\240\0\0@\0\0\37\0\240\0"..., 192}, {NULL, 0}, {"", 0}], 3) = 192
read(5, 0x2ba9ac4, 4096)                = -1 EAGAIN (Resource temporarily unavailable)

我谷歌了一下那行read(5, 0x2ba9ac4, 4096),似乎更重要,而且似乎许多其他应用程序也存在同样的问题。我尝试重新启动 X 服务器,但没有帮助。

您知道如何解决这个问题吗?

答案1

它正在尝试读取套接字并挂起以等待服务器响应。您可能没有为套接字设置超时时间,或者您的互联网可能未完全正常运行,或者目标服务器可能导致您等待而无响应。

无论如何,这都是程序开发人员需要解决的问题,他们需要确保所有读取都出现超时和错误,并可能需要重试。除非开发人员已经查看了该问题并确定这是上游库问题或下游打包问题。

相关内容