Как правильно отключить Eclipse из командной строки Linux? - PullRequest
30 голосов
/ 18 июня 2011

Есть ли способ аккуратно завершить работу Eclipse из командной строки, чтобы сохранить файлы и рабочие пространства?убить -3 ничего не делает.kill -1 и kill -15 (по умолчанию) приводят к внезапному завершению Eclipse с всплывающим окном завершения JVM.kill -9 делает то же самое.

Вариант использования: я работаю удаленно на машине с загруженным Eclipse и хочу сохранить память, закрыв Eclipse, но я хочу, чтобы Eclipse сохранил еесначала укажите.

Я мог бы использовать VNC или какое-нибудь альтернативное программное обеспечение для совместного использования рабочего стола, но это действительно тяжело, и я бы предпочел решение для командной строки.

РЕДАКТИРОВАТЬ: Информация о системе: RHEL5.1 64-битный с использованием GNOME

Ответы [ 7 ]

42 голосов
/ 13 октября 2012

Я понял это с помощью ответа Гиги и другого вопроса . Вам понадобятся утилиты 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 о твиках, которые вам нужны, чтобы заставить его работать из скрипта.

7 голосов
/ 31 января 2013

Недостаточно репутации, чтобы комментировать ответ Пиджа выше ... Это почти работает, но мне нужно было дождаться окончания анимации 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
4 голосов
/ 08 января 2015

Попробуйте убить процесс Java (ов).Do ps -ea | grep java

3 голосов
/ 18 июня 2011

Любое добавленное ShutdownHooks ( более подробная информация здесь ) должно быть выполнено JVM, когда завершено SIGTERM.Поэтому, я думаю, проблема в том, как Eclipse запрограммирован на обработку таких сигналов.

Поскольку я не знаю, как в Eclipse реализован процесс очистки, я могу только предположить, что он не вызывается каким-либоShutdownHook (а точнее Action или чем-то подобным).

Редактировать: pidge предоставил ответ ниже , в котором подробно описаны шаги, которые должны позволить вам полностью отключить Eclipse из командной строки.

1 голос
/ 18 июня 2011

Вы пробовали с помощью wmctrl? wmtrl -l списки окон и wmlctrl -c -P следует закрыть окно. В любом случае у вас могут возникнуть проблемы с диалоговым окном подтверждения затмения.

0 голосов
/ 17 ноября 2015

Ответ на этот вопрос был мне полезен в аналогичной проблеме: Затмение висит, как его правильно убить?

После того, как я убил процесс Eclipse, окно Eclipse оставалось там до тех пор, пока я не убил JAVA-процесс (у меня не было Javaw-процесса, как в ответе выше. У меня был только один «JAVA-процесс», который при уничтожении устранял проблему) ,

0 голосов
/ 18 июня 2011

Вы пробовали kill -HUP (kill -1)?- это канонический способ сказать процессу, что тот, кто с ним взаимодействовал, ушел, и он должен очиститься соответствующим образом

...