有没有办法从命令行干净地关闭Eclipse,以便保存文件和工作区?杀-3没有做任何事情。 kill -1和kill -15(默认值)导致Eclipse突然弹出JVM终止弹出窗口。 kill -9做同样的事情。
用例是我在装有Eclipse的机器上远程工作,我希望通过关闭Eclipse来节省内存,但我希望Eclipse先保存其状态。
我可以使用VNC或其他一些替代桌面共享软件,但这非常重,我更喜欢命令行解决方案。
编辑:系统信息:RHEL5.1 64位使用GNOME
答案 0 :(得分:42)
我在gigi's answer和another question的帮助下解决了这个问题。您将需要包管理器中的wmctrl
和xdotool
实用程序。
除非您在同一显示器上的终端仿真器中运行,否则您需要设置正确的显示器:
$ export DISPLAY=:0.0
然后(从示例中删除不相关的窗口):
# List windows
$ wmctrl -l
...
0x030000fa 0 kcirb Java - Eclipse
# Tell Eclipse window to close gracefully
$ wmctrl -c eclipse
# Darn, there's a confirmation dialog
$ wmctrl -l
...
0x030000fa 0 kcirb Java - Eclipse
0x03003c2d 0 kcirb Confirm Exit
# Send return key to the window
$ xdotool key --window 0x03003c2d Return
至少在Ubuntu 12.04上为我工作过。
编辑:请参阅Scarabeetle's answer了解使脚本运行所需的调整。
答案 1 :(得分:7)
对上述pidge's answer发表评论的声誉不足...... 它几乎可以工作,但我需要等待一些Gnome3动画完成,然后将焦点放在“确认退出”窗口:
export DISPLAY=:0.0 # Do this in main X session
wmctrl -c "Eclipse SDK" # Close main window
sleep 1 # Wait for animation
wmctrl -a "Confirm Exit" # Give focus to the dialog
# Send a Return keypress to press the OK button
xdotool key --window $(xdotool search "Confirm Exit") Return
答案 2 :(得分:3)
当ShutdownHooks
终止时,JVM应执行任何添加的SIGTERM
(more info here)。因此,我认为问题在于Eclipse的编程方式来处理这些信号。
由于我不知道如何在Eclipse中实现清理过程,我只能假设任何ShutdownHook
(而不是Action
或类似的东西)都没有调用它。
编辑:pidge提供了an answer below,但是它详细说明了允许您从命令行干净地关闭Eclipse的步骤。
答案 3 :(得分:3)
尝试杀死java进程。做ps -ea | grep java
答案 4 :(得分:1)
你试过wmctrl吗? wmtrl -l 列出窗口和 wmlctrl -c -P 应关闭窗口。 无论如何,你可能会遇到eclipse确认对话框的问题。
答案 5 :(得分:0)
您是否尝试过kill -HUP
(kill -1
)? - 这是告诉流程任何与之交互的人已经消失并且应该适当清理的规范方式
答案 6 :(得分:0)
在类似的问题中,这个问题的答案对我有帮助:Eclipse hanging, how to kill it properly?
在我杀死eclipse进程之后,Eclipse窗口一直存在,直到我杀死了java进程(我没有像上面的答案那样有一个javaw进程。我只有一个" java"进程当杀死时修复问题)。