Як закрити додаток з терміналу так само, як правильно вийти з нього


9

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

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

Від man killсигналу по замовчуванням , як видається, 15) SIGTERM, буде цей сигнал буде сказати додаток я намагаюся закрити , щоб очистити, закрити відкриті файли, зберегти речі?

Чи є кращий спосіб, якщо я хочу це зробити з терміналу?


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

Відповіді:


9

Типовим способом вишукано закрити додаток є використання kill -TERM 1234, де 1234PID вікна. Проблема, однак, полягає в тому, що графічні програми призначені для прослуховування конкретного сигналу від самого 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перелічить усі вікна та введено числовий ідентифікатор у шістнадцятковій формі у першому стовпці. =)
Терранс

Дякую, відмінно працює з більшістю програм, але з Deluge є можливість 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.