Як програмно вбити gui-програми через термінал?


22

Чи є спосіб закрити додаток GUI дружним способом " будь ласка, киньте зараз " без графічного доступу до вікна програм?

Наприклад, якщо дисплей Gnome / X випадає з чорного кольору, я хотів би переключитися на tty2 і закрити такі програми, як firefox, таким чином, щоб вони могли зберігати конфігурацію тощо. У кращому випадку без додаткових запитів користувачів.

Відповіді:


19

Зазвичай ви можете використовувати SIGHUP для "дружнього" закриття програми (з графічним інтерфейсом або без нього).

kill -HUP <application_pid>

ВІДМОВЛЕНО : додано іншу інформацію

Спосіб обробки SIGHUP залежить від додатків, тому, як зауважив Дейв , може статися, що цей сигнал маскується або обробляється. Однак цілком всі інтерактивні програми виходять вишукано за допомогою SIGHUP.

З іншого боку, я повинен визнати, що зазвичай я дотримуюся цієї схеми:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

Очевидно, що остання команда не така "дружня".


3
Якщо ви не знаєте PID програми, ви можете pkillзамість цього вказати ім'я виконуваного файлу. Наприклад:pkill -HUP firefox-bin
Калеб

@Dave також: Цікаво, що я виявив, що це пов'язане, що говорить про подібний, але перевернутий порядок: TERM-> INT-> HUP (маючи на увазі старість). Можливо, я буду мати на увазі HUP-> INT-> TERM, оскільки KILL не здається мені доброзичливим. Дякую всім.
jfk

@Caleb, будьте обережні там, де є кілька процесів з однаковою назвою: pkillвб'є їх усіх. Наприклад, запустити це кілька разів , щоб зробити деякі фонові процеси: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Тоді робіть pkill -HUP sed. Ви будете вбивати всі запущені екземпляри сед, а також будь-які інші екземпляри, які роблять корисну роботу.
ahcox

@Caleb, крім того, pkillтакож знищить деякі програми, яких ви не розраховуєте: наприклад, якщо у вас chromiumзапущена програма і хочете вбити програму, яку називають rom, pkillвона з радістю збиватиметься chromium. Краще використовувати killall, яке відповідатиме лише точній назві (не на Solaris, хоча це буквально вбиває всі процеси ).
Руслан

@Ruslan Або використовуйте, pkill -xщоб отримати точну відповідність замість часткової відповідності. Я особисто скористаюсь частковою відповідністю для збереження набору тексту, але ви повинні знати, що робить інструмент. Так, за замовчуванням він відповідає частковим рядкам. Ще один корисний варіант - -fзбігатися з повним командним рядком, а не просто $0.
Калеб

5

Ви можете спробувати:

kill -TERM <pid>

або

kill -TERM `pidof <application_name>`

Принаймні, в деяких системах, коли система перебуває в режимі відключення, всі процеси надсилають сигнал TERM (15), перш ніж надсилають сигнал KILL (9). HUP часто просто змушує програму перезавантажувати свої конфігурації, але це може бути різним у залежності від процесу.


2

Немає загального способу сказати програмі вийти та зберегти її конфігурацію. Можливо, існують способи сповіщення програм за допомогою певного фреймворку, наприклад, dcop kfoo MainApplication-Interface quitдля деяких програм KDE 3. Зверніть увагу, що програма може відобразити діалогове вікно з проханням підтвердити.

Якщо дисплей X стає непридатним, вбийте X-сервер. Натисніть Ctrl+ Alt+ BackSpace; якщо це не працює, вбийте процес X сервера sudo pkill -x Xorg. Коли X-сервер гине, всі X-програми отримують сповіщення, і вони спробують вийти граціозно (немає гарантії, що вони все врятують, але це найкраща ставка).


Я не знав, чи будуть додатки повідомлені або просто вбиті; і оскільки комбінація клавіш не включена за замовчуванням у Fedora ..... Тепер я знаю, як її вбити за допомогою командного рядка!
jfk

1

Відповідь на @ andcoz відповідь, якщо ви не знаєте PID програми (я припускаю, що ви не знаєте це напам’ять), спробуйте:

kill -HUP `pidof [application_name]`

2
Зробіть цей крок фратер і спробуйте pkill -HUP [application_name]:)
Caleb

Щойно дізналися pkill і pgrep: D
jfk

1

Ще дві команди, які ви хочете розглянути, є wmctrl -cі xdotool windowkill. Я не впевнений, чи windowkillце саме те, що ти шукаєш, якщо ні, то ти можеш зацікавити windowdeleteпатч.

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