如何从 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 的帮助下解决了这个问题。您将需要包管理器提供的 wmctrlxdotool 实用程序。

除非你在同一个显示器上运行终端模拟器,否则你需要设置正确的显示器:

$ 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 以进行命令行开发?

启动纯命令行界面的 Linux 后如何打开应用程序? [关闭]

如何从命令行使用Eclipse嵌入式Maven安装?