如何从 Linux 命令行彻底关闭 Eclipse?
Posted
技术标签:
【中文标题】如何从 Linux 命令行彻底关闭 Eclipse?【英文标题】:How to cleanly shutdown Eclipse from Linux command line? 【发布时间】:2011-06-17 20:53:53 【问题描述】:有没有办法从命令行干净地关闭 Eclipse,以便保存文件和工作区? kill -3 什么都不做。 kill -1 和 kill -15(默认)导致 Eclipse 突然退出并弹出 JVM 终止弹出窗口。 kill -9 做同样的事情。
用例是我在一台装有 Eclipse 的机器上远程工作,我想通过关闭 Eclipse 来节省内存,但我希望 Eclipse 先保存它的状态。
我可以使用 VNC 或其他桌面共享软件,但那真的很重,我更喜欢命令行解决方案。
编辑:系统信息:使用 GNOME 的 RHEL5.1 64 位
【问题讨论】:
【参考方案1】:我在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,了解您需要对其进行调整以使其从脚本中运行。
【讨论】:
谢谢!这很完美。xdotool search Exit
的一点小改进是不必要的,因为它返回 0x03003c2d
的十进制形式。您可以像xdotool key --window 0x03003c2d Return
一样直接使用来自wmctrl -l
的十六进制窗口ID 并跳过搜索步骤。【参考方案2】:
没有足够的声誉来评论上面的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
【讨论】:
【参考方案3】:任何添加的ShutdownHooks
(more info here) 都应该在被SIGTERM
终止时由JVM 执行。因此,我认为问题在于 Eclipse 处理此类信号的编程方式。
由于我不知道清理过程是如何在 Eclipse 中实现的,我只能假设它没有被任何 ShutdownHook
调用(而是被 Action
或类似的东西调用)。
编辑:pidge 提供了an answer below,但是其中详细说明了应该允许您从命令行干净地关闭 Eclipse 的步骤。
【讨论】:
这是对的。插件开发人员可以编写一个插件来侦听套接字上的关闭命令,并调用IWorkbench.close()
。或者可以更新 eclipse 和启动器以支持更多的内容,而不仅仅是 openFile 操作。但是默认情况下eclipse没有任何东西。
今天我只调用$ kill pid
kill -HUP pid 对我来说效果很好。这会让 eclipse 关闭,但仍然会更改它以删除其所有锁定文件等。【参考方案4】:
尝试杀死 java 进程。做ps -ea | grep java
【讨论】:
【参考方案5】:你试过 wmctrl 吗? wmtrl -l 列出窗口和 wmlctrl -c -P 应该关闭窗口。 无论如何,您可能会在 eclipse 的确认对话框中遇到问题。
【讨论】:
安装了它并玩弄了一下。不能远程工作(通过 ssh shell)。在本地,它甚至没有列出 Eclipse 窗口。也许我只是用错了? 远程运行命令需要设置DISPLAY环境变量export DISPLAY=:0.0
。请参阅我的答案以获取演练。【参考方案6】:
你试过kill -HUP
(kill -1
) 吗? -- 这是告诉进程与它交互的人已经离开并且应该适当清理的规范方式
【讨论】:
不,这不起作用 - Eclipse 突然退出(弹出 JVM 终止消息)。【参考方案7】:这个问题的答案在类似的问题上对我有帮助:Eclipse hanging, how to kill it properly?
在我终止 eclipse 进程后,Eclipse 窗口一直保留在那里,直到我终止了 java 进程(我没有上面答案中的 javaw 进程。我只有一个“java”进程在被终止时解决了问题) .
【讨论】:
以上是关于如何从 Linux 命令行彻底关闭 Eclipse?的主要内容,如果未能解决你的问题,请参考以下文章
Java:Eclipse 中的行号与命令行中的行号相同吗? [关闭]
以eclipse -clean命令从命令行启动 eclipse
[Bat]如何彻底关闭每个盘符默认的共享$(即使重启也有效)
如何在 linux 上设置 android SDK 以进行命令行开发?