Linux: Schließen Sie ein Programm mit der Befehlszeile (nicht beenden)

21

Einige Anwendungen erlauben nur eine laufende Instanz (wie Eclipse, wenn Sie denselben Arbeitsbereich verwenden möchten). Wenn ich mich also von einem anderen Ort aus anmelde, muss ich die Anwendung beenden, die geöffnet war, als ich mich zuvor von einem anderen Ort aus angemeldet habe.

Ich benutze immer den Befehl kill, um den laufenden Prozess abzubrechen. Wenn Sie jedoch einen Prozess beenden, werden möglicherweise einige Zustände nicht gespeichert, die für die zukünftige Verwendung nützlich sind. Wenn Sie es jedoch ordnungsgemäß "schließen", indem Sie beispielsweise auf die Schaltfläche "Schließen" klicken, werden die Status ordnungsgemäß gespeichert.

Gibt es eine Möglichkeit, eine Anwendung über die Befehlszeile ordnungsgemäß zu "schließen"? Ich weiß, dass dies von Anwendung zu Anwendung unterschiedlich sein kann. Seien wir also etwas allgemeiner: Wie sende ich ein Signal an eine andere laufende Anwendung, und dieses Signal funktioniert so, als ob wir auf die Schaltfläche "Schließen" in der oberen Leiste klicken?

Vendetta
quelle
2
Wenn wir davon ausgehen, dass der Remotezugriff auf den Desktop mit VNC und das grafische Klicken auf Schließen zu viel Aufwand bedeutet.
Brian Swift

Antworten:

33

Standardmäßig sendet der Befehl kill SIGTERM(Beendigungssignal) an den laufenden Prozess. Im Gegensatz zu SIGKILLdem Prozess, bei dem der Prozess ohne Antwortmöglichkeit gewaltsam SIGTERMabgebrochen wird , kann das Signal vom Prozess abgefangen werden, sodass es ordnungsgemäß beendet werden kann. Ob es tatsächlich ordnungsgemäß beendet wird oder nicht, hängt vollständig vom Prozess selbst ab. es kann sich genauso leicht selbst töten oder das Signal vollständig ignorieren.

Sie können sicherstellen, dass Sie SIGTERManstelle eines anderen Signals senden, indem Sie es in der Befehlszeile explizit angeben:

kill -s TERM <pid>
goldPseudo
quelle
1
Ja, die Prämisse des OP ist falsch. Der killBefehl versucht ein ordnungsgemäßes Herunterfahren. Wenn die Anwendung in diesem Fall nicht sauber geschlossen wird, ist sie fehlerhaft. (Und die überwiegende Mehrheit der Anwendungen ist nicht kaputt.)
David Schwartz
2
Firefox scheint (kaputt) zu sein. Wenn ich ausgeführt werde kill -s TERM <firefox-pid>, wird es nicht ordnungsgemäß heruntergefahren, und wenn ich es erneut starte, werden Sie gefragt, ob ich die abgestürzte Sitzung wiederherstellen möchte. : Seufzer:
Wilson F
6

Beachten Sie, dass bei Verwendung von pkillanstelle von kill, um TERM anzugeben, die Syntax wie folgt lautet:

pkill -TERM <process-name>

pkill ist wie töten, aber Sie können den Prozessnamen anstelle der ID verwenden. man pkill

Connor McCormick
quelle