我有一个应用程序,它会在通过 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 的任何人都会遇到同样的问题;我认为可以安全地假设情况并非如此,否则它将被记录在整个网络上;所以也许我的理解仍然存在?