Как полностью закрыть Eclipse из командной строки Linux?

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

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

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

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


person Maian    schedule 17.06.2011    source источник


Ответы (7)


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

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

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

person vehk    schedule 17.06.2011
comment
Это правильно. Разработчик подключаемого модуля может написать подключаемый модуль для прослушивания сокета команды закрытия и вызова IWorkbench.close(). Или eclipse и средство запуска могут быть обновлены, чтобы поддерживать больше, чем просто действие openFile. Но по умолчанию в eclipse нет ничего. - person Paul Webster; 20.06.2011
comment
сегодня я просто вызываю $ kill pid - person jorgeu; 04.03.2015
comment
kill -HUP pid у меня хорошо работает. Это приводит к выключению eclipse, но все же позволяет удалить все его файлы блокировки и т. д. - person Andrew Rice; 18.05.2016

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

person pidge    schedule 13.10.2012
comment
Спасибо! Это сработало идеально. Одно незначительное улучшение xdotool search Exit не требуется, так как оно возвращает десятичную форму 0x03003c2d. Вы можете напрямую использовать шестнадцатеричный идентификатор окна из wmctrl -l, например xdotool key --window 0x03003c2d Return, и пропустить шаг поиска. - person rkyser; 20.12.2013

Недостаточно репутации, чтобы прокомментировать ответ pidge выше... Это почти работает, но мне нужно было дождаться анимации 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
person Scarabeetle    schedule 31.01.2013

Попробуйте убить Java-процесс(ы). Сделать ps -ea | grep java

person Sriram Bhargav Karnati    schedule 08.01.2015

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

person gigi    schedule 17.06.2011
comment
Установил и немного повозился. Не работает удаленно (через ssh shell). Локально он даже не отображает окно затмения. Может я просто неправильно его использую? - person Maian; 18.06.2011
comment
Вам нужно установить переменную среды DISPLAY export DISPLAY=:0.0, если вы запускаете команду удаленно. Смотрите мой ответ для прохождения. - person pidge; 13.10.2012

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

person Chris Dodd    schedule 17.06.2011
comment
Нет, это не сработало - Eclipse внезапно завершает работу (выскакивает сообщение о завершении JVM). - person Maian; 18.06.2011

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

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

person user3131978    schedule 17.11.2015