2011-06-17 132 views
26

有没有办法从命令行干净地关闭Eclipse,以便保存文件和工作区?杀-3没有做任何事情。 kill -1和kill -15(默认)会导致Eclipse在JVM终止弹出窗口时突然退出。 kill -9做同样的事情。如何从Linux命令行干净地关闭Eclipse?

用例是我在一台装有Eclipse的机器上远程工作,我想通过关闭Eclipse来节省内存,但我希望Eclipse首先保存它的状态。

我可以使用VNC或其他桌面共享软件,但这确实很重,我更喜欢命令行解决方案。

编辑:系统信息:RHEL5.1 64位使用GNOME

回答

3

任何添加ShutdownHooksmore info here)时SIGTERM终止应当由JVM执行。因此,我认为问题在于Eclipse编程处理这些信号的方式。因为我不知道如何在Eclipse中执行清理过程,所以我只能假定它不是由任何ShutdownHook(而不是由Action或类似的东西)调用的。

编辑:pidge已经提供了an answer below但是详细说明了哪些步骤可以让您从命令行干净地关闭Eclipse。

+1

这是对的。一个插件开发人员可以编写一个插件来侦听一个关闭命令的套接字,然后调用'IWorkbench.close()'。或者eclipse和启动程序可以更新以支持更多的不仅仅是openFile操作。但是默认情况下,eclipse没有任何东西。 –

+0

今天我只是打电话给$ kill pid – jorgeu

+0

kill -HUP pid适合我。这得到eclipse关机,但仍然给它一个更改,以删除所有的锁文件等 –

1

你有没有试着用wmctrl? wmtrl -l 列出了窗口和 wmlctrl -c -P 应该关闭窗口。 无论如何,你可能会遇到eclipse确认对话框的问题。

+0

安装它,并与它一起twiddled。没有远程工作(通过ssh shell)。在本地,它甚至没有列出日食窗口。也许我只是用它错了? – Maian

+0

如果远程运行命令,则需要设置DISPLAY环境变量'export DISPLAY =:0.0'。查看我的答案进行演练。 – pidge

0

你试过kill -HUPkill -1)? - 这是规范的方法告诉大家,不管是谁进行交互与它已经走了一个过程,它应该清理适当

+0

没有工作 - Eclipse突然退出(JVM终止消息弹出)。 – Maian

38

我在gigi's answeranother 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 

# Find the window id 
$ xdotool search Exit 
Defaulting to search window name, class, and classname 
50347053 

# Send return key to the window 
$ xdotool key --window 50347053 Return 

曾任职至少在Ubuntu 12.04上是这样。

编辑:请参阅Scarabeetle's answer您需要通过脚本使其工作。

+3

谢谢!这工作完美。由于它返回0x03003c2d的十进制形式,所以'xdotool search Exit'的一个小改进是不必要的。您可以直接使用'wmctrl -l'中的十六进制窗口ID,如'xdotool key --window 0x03003c2d Return'并跳过搜索步骤。 – rkyser

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

尝试杀死java进程(es)。做ps -ea | grep java

0

回答这个问题是有帮助的我在一个类似的问题:Eclipse hanging, how to kill it properly?

后我杀了日食过程Eclipse窗口不停,直到我杀了java程序(我没有一个javaw进程就像上面的答案一样,我只有一个“java”进程,当遇难者解决问题时)。