4

我有一个应用程序,它会在通过 eclipse 运行时导致 eclipse 本身挂起。如果我将此应用程序导出为 jar 并运行它,它工作正常。但是如果我运行(或调试)它,应用程序将出现启动(根据 ps)并运行;但 eclipse 本身会挂起,并报告为没有 CPU 或内存使用的“停止”程序。我在这个应用程序的第一行放置了一个断点,在 eclipse 停止之前它甚至没有到达那里。如果我强行将日食从停止状态唤醒,它将起作用;但它也会失去与我启动的程序的联系。我要调试的程序将继续运行,但在我恢复停止的 eclipse 后,eclipse 无法控制或杀死它。

我可以运行许多其他应用程序而不会出现 eclipse 的问题。奇怪的是我之前遇到过这个问题,然后我可以运行我的应用程序一天,现在我又回到了原来的问题。我不知道重要的人之间发生了什么变化。

任何人都可以建议可能导致此问题的原因或如何修复它?

更新:

我做了一些更多的 linux 魔术。似乎 eclipse 在等待命令时停止了: sh -c stty -lcanon min 1

似乎在那之前有一个 sh (已失效)命令也挂起而没有被收割几分钟,我认为这使 eclipse 无法正常运行;如果我等待足够长的时间, sh (已失效)最终会消失;但随后我刚刚链接的 sh 命令出现了。我不知道原来失效的 SH 命令是什么;在它失效之前,我无法以足够快的速度捕捉它。这两个问题都只发生在 eclipse 中;作为一个 jar 文件,这个程序运行得非常好。

我的假设是eclipse没有正确获取或处理sigchild?这至少可以解释 sh (已失效)应用程序。它没有解释当前未显示为已失效的 SH 命令;尽管它应该在几秒钟内执行?

更新 2.0:

我找到了这个链接: http: //linux.about.com/od/srl_howto/a/hwtsrl13t04_3.htm 基本上 stty 在使用 < /dev/tty 语法时会挂起;这就是为什么不推荐使用该语法并用较新的语法替换的原因。我很确定这是问题所在。可悲的是,我无法弄清楚哪个库正在使用已弃用的命令。我认为这一切都是从构建 ConsoleReader 开始的;但谁知道实际运行冻结命令的代码是什么?此外,如果这是在 linux 环境中从 eclipse 运行 consoleReader 的任何人都会遇到同样的问题;我认为可以安全地假设情况并非如此,否则它将被记录在整个网络上;所以也许我的理解仍然存在?

4

3 回答 3

3

它与为附加控制台而创建的 stty 进程的配置有关,因此只会在类似 UNIX 的系统上发生。似乎在当前 2.11 jline 版本上已修复。

要绕过该问题,您可以使用以下命令禁用特殊的 unix-terminal 功能:

-Djline.terminal=none

作为 Eclipse 启动配置中的 VM 参数。

于 2013-09-23T09:03:01.883 回答
0

尝试在eclipse安装的根目录中增加-Xms<abc>m/-Xmx<efg>m(取决于系统内存) 。eclipse.ini

于 2013-03-12T04:39:54.257 回答
0

问题是我们使用的是旧版本的“jline”,它使用了已弃用的功能。新的 jline jar 解决了这个问题,因为它不再使用已弃用的 stty 调用。我不太确定为什么日食每次都会导致这种情况发生;似乎它应该是一个间歇性错误,但 jline 绝对是原因。

于 2013-03-25T16:20:44.750 回答