Как закрыть приложение из терминала так же, как правильно выйти из него

9

Обычно при запуске приложения в графической среде, когда я хочу закрыть его, я щелкаю Xв верхнем левом углу окна или перехожу на File > Close.

Я хотел бы иногда закрывать эти программы удаленно через ssh из терминала, используя командную строку, теперь я использую killкоманду, но мне интересно, что она делает то же самое, что правильно выходит из приложения из самого себя.

От man killсигнала по умолчанию , как представляется, 15) SIGTERM, будет этот сигнал будет сказать приложение я пытаюсь закрыть , чтобы очистить, закрыть открытые файлы, сохранить вещи?

Есть ли лучший способ, если я хочу сделать это из терминала?

Майк
источник
2
Спасибо за вопрос! Я узнал кое-что, что наверняка пригодится в какой-то момент.
Олифаунт - восстановить Монику

Ответы:

9

Типичный способ закрыть приложения корректно заключается в использовании kill -TERM 1234, где 1234это PID окна. Проблема, однако, заключается в том, что графические приложения предназначены для прослушивания определенного сигнала от самого X-сервера, а не для прослушивания TERMсигнала.

Это означает, что вам потребуется какой-то агент между вами и X-сервером, чтобы сообщить, что вы хотите отправить соответствующий сигнал. Вы, конечно, можете написать программу на C, однако существует wmctrlпрограмма (не удивительно написанная на C), которая делает именно это.

Использование wmctrlпросто:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Он не установлен по умолчанию, поэтому получите его с sudo apt-get install wmctrl

Существует много вариантов использования, wmctrlвыходящих далеко за рамки простого закрытия окон, поэтому, пожалуйста, ознакомьтесь с другими моими ответами и ответами Якоба Влейма о том, где он использовался.

Сергей Колодяжный
источник
2
Просто добавьте сюда, wmctrl -lкоторый перечислит все окна и даст числовой идентификатор в шестнадцатеричном виде в первом столбце. =)
Terrance
Спасибо, отлично работает с большинством приложений, но с потопом есть вариант Minimize to tray on closeи wmctrl -cбудет просто закрыть окно, не само приложение, оно будет оставаться работает минимизировано в трей.
Майк
3

Я думаю, что стоит добавить, что wmctrl -xlрезультаты будут такими:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Где xзапрашивает класс окна, чтобы быть в выводе. Часто это самый простой способ закрыть одну и ту же программу каждый раз. Затем мы можем просто предоставить класс окна при его закрытии:

wmctrl -xc speedcrunch.Speedcrunch

Этот пример закроет speedcrunch.

Даниэль Сенторе
источник