Wie kann man GUI-Anwendungen über ein Terminal softtöten?

22

Gibt es eine Möglichkeit , eine GUI - Anwendung in freundlich „schließen Sie jetzt beenden , dich “ Art und Weise, ohne grafischen Zugriff auf die Fenster - Anwendungen?

Wenn beispielsweise die Gnome / X-Anzeige schwarz wird, möchte ich zu tty2 wechseln und Anwendungen wie Firefox so schließen, dass sie ihre Konfiguration usw. speichern können. Am besten ohne weitere Benutzeranfragen.

jfk
quelle

Antworten:

19

Normalerweise können Sie mit SIGHUP eine Anwendung "freundlich" schließen (mit oder ohne grafische Oberfläche).

kill -HUP <application_pid>

BEARBEITET : einige andere Infos hinzugefügt

Die Art und Weise, wie SIGHUP behandelt wird, ist anwendungsabhängig. Wie Dave bemerkte, kann es passieren, dass dieses Signal maskiert oder behandelt wird. Alle interaktiven Anwendungen werden jedoch ordnungsgemäß mit einem SIGHUP beendet.

Andererseits muss ich zugeben, dass ich normalerweise diesem Schema folge:

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

Offensichtlich ist der letzte Befehl nicht so "freundlich".

andcoz
quelle
3
Wenn Sie die PID der Anwendung nicht kennen, können Sie pkillstattdessen den Namen der ausführbaren Datei angeben. Zum Beispiel:pkill -HUP firefox-bin
Caleb
@ Dave auch: Interessant, ich fand dies verwandt, was eine ähnliche, aber umgekehrte Reihenfolge nahe legt: TERM-> INT-> HUP (beachte das Alter). Vielleicht werde ich HUP-> INT-> TERM im Auge behalten, da KILL nicht freundlich zu mir zu sein scheint. Dank an alle.
JFK
@Caleb, sei nur vorsichtig, wenn es mehrere Prozesse mit demselben Namen gibt: Bringt pkillsie alle zum Erliegen . ZB führt dies ein paar Mal einige Hintergrundprozesse zu machen: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Dann tu es pkill -HUP sed. Sie töten alle Instanzen von sed, die Sie gestartet haben, sowie alle anderen Instanzen, die nützliche Arbeit leisten.
Ahcox
@Caleb pkillwird außerdem auch einige Apps töten, die Sie nicht erwarten: Wenn Sie z. B. chromiumein Programm mit dem Namen ausführen und töten möchten rom, pkillwird es glücklich chromiumabgeschossen. Bessere Verwendung killall, die nur mit dem genauen Namen übereinstimmt (jedoch nicht unter Solaris, wo buchstäblich alle Prozesse abgebrochen werden ).
Ruslan
@ Ruslan Oder verwenden Sie pkill -x, um eine genaue Übereinstimmung anstelle einer Teilübereinstimmung zu erhalten. Ich persönlich nutze die teilweise Übereinstimmung, um das Tippen zu speichern, aber Sie müssen wissen, was das Tool tut. Ja, standardmäßig werden Teilzeichenfolgen abgeglichen. Eine weitere nützliche Option besteht -fdarin, anstelle von nur die vollständige Befehlszeile abzugleichen $0.
Caleb
5

Vielleicht möchten Sie versuchen:

kill -TERM <pid>

oder

kill -TERM `pidof <application_name>`

Zumindest auf einigen Systemen erhalten alle Prozesse, wenn das System heruntergefahren wird, das TERM (15) -Signal, bevor sie das KILL (9) -Signal erhalten. HUP veranlasst die Anwendung oft nur, ihre Konfigurationen neu zu laden, kann jedoch von Prozess zu Prozess unterschiedlich sein.

Dave
quelle
2

Es gibt keine allgemeine Möglichkeit, eine Anwendung anzuweisen, ihre Konfiguration zu beenden und zu speichern. Es gibt möglicherweise Möglichkeiten, Anwendungen mithilfe eines bestimmten Frameworks zu benachrichtigen, z. B. dcop kfoo MainApplication-Interface quitfür einige KDE 3-Anwendungen. Beachten Sie, dass die Anwendung möglicherweise ein Dialogfeld anzeigt, in dem Sie zur Bestätigung aufgefordert werden.

Wenn die X-Anzeige unbrauchbar wird, beenden Sie den X-Server. Drücken Sie Ctrl+ Alt+ BackSpace; Wenn das nicht funktioniert, beenden Sie den X-Server-Prozess mit sudo pkill -x Xorg. Wenn der X-Server ausfällt, werden alle X-Anwendungen benachrichtigt und versuchen, ordnungsgemäß zu beenden.

Gilles 'SO - hör auf böse zu sein'
quelle
Ich wusste nicht, ob die Apps benachrichtigt oder einfach beendet werden. und da die Tastenkombination unter Fedora nicht standardmäßig aktiviert ist ..... weiß ich jetzt, wie man sie über die Befehlszeile beendet!
JFK
1

Ähnlich wie bei @ andcoz: Wenn Sie die PID der Anwendung nicht kennen (ich nehme an, Sie wissen es nicht auswendig), versuchen Sie Folgendes:

kill -HUP `pidof [application_name]`
n0pe
quelle
2
Mach den einen Schritt weiter und versuche es pkill -HUP [application_name]:)
Caleb
Ich habe gerade pkill und pgrep gelernt: D
jfk
1

Zwei weitere Befehle, die Sie möglicherweise berücksichtigen möchten, sind wmctrl -cund xdotool windowkill. Ich bin mir nicht sicher, ob windowkilles genau das ist, wonach Sie suchen, wenn nicht, sind Sie möglicherweise an dem windowdeletePatch interessiert .

Jamie Kitson
quelle