我有一个应用程序,当通过eclipse运行时会导致eclipse本身挂起。如果我将此应用程序导出为jar并运行它,它可以正常工作。但是如果我运行(或调试)它,应用程序似乎将启动(根据ps)并运行;但是eclipse本身会挂起,并被报告为没有CPU或内存使用的“已停止”程序。我在这个应用程序的第一行放置了一个断点,它甚至没有在eclipse结束停止之前到达那里。如果我强行将eclipse从停止的状态中唤醒,它将起作用;但它也会失去与我开始的程序的联系。我想要调试的程序将继续运行,但是在我恢复停止的日食之后,eclipse无法控制或杀死它。
我可以在没有eclipse问题的情况下运行大量其他应用程序。奇怪的是我之前遇到过这个问题,然后我可以运行我的应用程序一天,现在我又回到原来的问题了。我不知道那些重要的事情会发生什么变化。
有人可以提出可能导致此问题的原因或如何修复它吗?
更新:
我做了更多的Linux魔术。看来eclipse在等待命令时停止了: sh -c stty -lcanon min 1
在此之前,似乎还有一个sh(已解散)命令,该命令也悬挂而没有收获几分钟,我认为这样可以防止日食正常运行;如果我等了足够久,sh(已解散)最终会消失;但是我刚刚联系的sh命令出现了。我不知道原来已解散的SH命令是什么;我不能做得足够快,以便在它消失之前抓住它。这两个问题只发生在日食中;作为一个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的任何人都会遇到同样的问题;我认为可以安全地假设不是这种情况,或者它将在整个网络上记录;也许我的理解还没有结束?
答案 0 :(得分:3)
它与为附加控制台而创建的stty进程的配置有关,因此仅在类似UNIX的系统上发生。似乎已修复当前的2.11 jline版本。
要绕过此问题,您可以使用以下方法禁用特殊的unix-terminal功能:
-Djline.terminal=none
作为eclipse启动配置的VM参数。
答案 1 :(得分:0)
尝试在eclipse安装的根目录中的-Xms<abc>m/-Xmx<efg>m
上增加eclipse.ini
(取决于系统内存)。
答案 2 :(得分:0)
问题在于我们使用的是旧版本的jline&#39;其中使用了已弃用的功能。新的jline jar解决了这个问题,因为它不再使用已弃用的stty调用。我不太确定为什么日食每次都会发生这种情况;似乎它应该是一个间歇性的错误,但jline绝对是原因。