Jak miękko zabijać aplikacje GUI przez terminal?


22

Czy istnieje sposób na zamknięcie aplikacji GUI w przyjazny sposób „ proszę wyjść teraz ” bez graficznego dostępu do okna aplikacji?

Na przykład, jeśli ekran Gnome / X ulegnie awarii na czarny, chciałbym przełączyć się na tty2 i zamknąć aplikacje, takie jak Firefox, w sposób, który pozwoli im zapisać swoją konfigurację itp. W najlepszym wypadku bez dalszych zapytań użytkownika.

Odpowiedzi:


19

Zwykle możesz użyć SIGHUP do „przyjaznego” zamknięcia aplikacji (z interfejsem graficznym lub bez).

kill -HUP <application_pid>

ZMIENIONO : dodano kilka innych informacji

Sposób obsługi SIGHUP zależy od aplikacji, więc, jak zauważył Dave , może się zdarzyć, że ten sygnał jest maskowany lub obsługiwany. Jednak całkiem wszystkie interaktywne aplikacje wychodzą z gracją dzięki SIGHUP.

Z drugiej strony muszę przyznać, że zwykle podążam za tym schematem:

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

Oczywiście ostatnie polecenie nie jest tak „przyjazne”.


3
Jeśli nie znasz identyfikatora PID aplikacji, możesz pkillzamiast tego podać nazwę pliku wykonywalnego. Na przykład:pkill -HUP firefox-bin
Caleb

@Dave też: Interesujące, znalazłem to pokrewne, co sugeruje podobną, ale cofniętą kolejność: TERM-> INT-> HUP (pamiętaj o starości). Może będę pamiętać o HUP-> INT-> TERM, ponieważ KILL nie wydaje mi się przyjazny. Dziękuje za wszystko.
jfk

@Caleb, bądź ostrożny tam, gdzie jest wiele procesów o tej samej nazwie: pkillzabije je wszystkie. Na przykład uruchomić to kilka razy, aby dokonać pewnych procesów w tle: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Więc zrób pkill -HUP sed. Zabijesz wszystkie instancje sed, które uruchomiłeś oraz wszelkie inne wykonujące pożyteczną pracę.
ahcox,

@Caleb ponadto pkillzabije niektóre aplikacje, których się nie spodziewasz: np. Jeśli masz chromiumuruchomiony i chcesz zabić program o nazwie rom, pkillchętnie chromiumzestrzeli. Lepsze użycie killall, które będzie pasować tylko do dokładnej nazwy (jednak nie w Solarisie, gdzie dosłownie zabija wszystkie procesy ).
Ruslan

@ Ruslan Lub użyj, pkill -xaby uzyskać dokładne dopasowanie zamiast dopasowania częściowego. Osobiście korzystam z częściowego dopasowywania, aby oszczędzać na pisaniu, ale musisz wiedzieć, co robi narzędzie. Tak, domyślnie dopasowuje ciągi częściowe. Inną przydatną opcją jest -fdopasowanie do pełnego wiersza poleceń zamiast po prostu $0.
Caleb

5

Możesz spróbować:

kill -TERM <pid>

lub

kill -TERM `pidof <application_name>`

Przynajmniej w niektórych systemach, gdy system jest zamykany, wszystkie procesy otrzymują sygnał TERM (15), zanim otrzymają sygnał KILL (9). HUP często powoduje, że aplikacja ponownie ładuje swoje konfiguracje, ale może być różna dla poszczególnych procesów.


2

Nie ma ogólnego sposobu, aby powiedzieć aplikacji, aby zamknęła i zapisała swoją konfigurację. Mogą istnieć sposoby powiadamiania aplikacji korzystających z określonego frameworka, np. W dcop kfoo MainApplication-Interface quitprzypadku niektórych aplikacji KDE 3. Pamiętaj, że aplikacja może wyświetlić okno dialogowe z prośbą o potwierdzenie.

Jeśli ekran X stanie się bezużyteczny, zabij serwer X. Naciśnij Ctrl+ Alt+ BackSpace; jeśli to nie zadziała, zabij proces serwera X za pomocą sudo pkill -x Xorg. Kiedy serwer X umiera, wszystkie aplikacje X są powiadamiane i będą próbowały wyjść z gracją (nie ma gwarancji, że wszystko uratują, ale jest to najlepszy wybór).


Nie wiedziałem, czy aplikacje zostaną powiadomione, czy po prostu zabite; a ponieważ kombinacja klawiszy nie jest domyślnie włączona w Fedorze ... Teraz wiem, jak zabić ją z wiersza poleceń!
jfk

1

Zgodnie z odpowiedzią @ andcoz, jeśli nie znasz PID aplikacji (zakładam, że nie znasz go na pamięć), spróbuj tego:

kill -HUP `pidof [application_name]`

2
Zrób ten krok bracie i spróbuj pkill -HUP [application_name]:)
Caleb

Właśnie nauczyłem się pkill i pgrep: D
jfk

1

Dwa inne polecenia, które warto rozważyć, to wmctrl -ci xdotool windowkill. Nie jestem pewien, czy windowkillwłaśnie tego szukasz, jeśli nie, możesz być zainteresowany windowdeletełatką.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.