Wie bleiben die erzeugten GUI-Programme beim Schließen von bash erhalten?

446
Robert Pollak

Wenn ich GUI-Programme von einem Terminal-Fenster aus gestartet habe (mit '&' am Ende), wie kann ich das Terminal schließen, ohne auch die GUI-Programme zu schließen?

1
Nicht als konkurrierende Antwort auf [Paul w. Maud'dibs Antwort] (https://superuser.com/a/1277430/401839), die wie eine unkomplizierte und einfache Lösung aussieht, aber eine Zusatzidee: Führen Sie einen Terminal-Multiplexer (tmux oder screen) aus. Wenn Sie die übergeordnete Bash beenden, werden der Terminal-Multiplexer und seine Kinder weiterbenutzt. Die Terminal-Multiplexer sind großartig: Schnelle Tastaturkürzel zum Erstellen einer neuen Sitzung, Trennschutz (sehr nützlich für Remote-Shells!), Funktionen zum Kopieren und Einfügen im Textmodus (abgesehen von dem, was eine GUI bietet), schnelles Aufteilen des Fensters (in mehrere Shells). , usw. TOOGAM vor 6 Jahren 0

4 Antworten auf die Frage

2
Paul w. Muad'dib

Sie können verwenden, um disown zu verhindern, dass das Programm von seinem Startterminal einen Auflegen-Anruf erhält. Auf diese Weise bleibt das GUI-Programm geöffnet, wenn das Terminal geschlossen wird.

Ah, es scheint, als wäre disown ein in bash integrierter Befehl (also hat die Manpage von bash die Details zu diesem Befehl). Wissen Sie zufällig, ob die Auswirkungen von Unterprogrammen, die ein Merkmal schließen, eher eindeutig für bash ist, oder bietet bash nur eine Lösung für ein Problem, das tendenziell weiter verbreitet ist (was auch andere Unix-Shells betrifft)? PS, ich sehe, deine Antwort wurde gerade akzeptiert (während ich diesen Kommentar eingetippt habe). Glückwunsch. TOOGAM vor 6 Jahren 0
Ich habe gerade in der [Dokumentation für zsh] (http://zsh.sourceforge.net/Doc/Release/Jobs-_0026-Signals.html#Jobs-_0026-Signals) (die ich auf einem anderen Rechner verwende) und auch nachgeschlagen verfügt über den ´Down'-Befehl. Nachdem Sie die [Manpage von ksh] (https://manpages.debian.org/stretch/ksh/ksh.1.en.html) überprüft haben, scheint es auch den Befehl ´disown´ zu enthalten. Paul w. Muad'dib vor 6 Jahren 1
0
Xen2050

Verwenden Sie nohupdas Programm auszuführen, wird es „einen Befehl ausführen immun gegen hangups, mit Ausgang auf einen Nicht-tty“

Stellen Sie dem Befehl einfach nohupwie in voran

nohup kdiff3 

Das &ist sogar optional und es ist nicht abhängig von bash.

0
xenoid

Ihre Desktop-Shell stellt möglicherweise ein CLI-Dienstprogramm zum Starten eines GUI-Programms bereit, als ob es von der Desktop-Shell aus gestartet würde (ich nehme an, das Dienstprogramm fordert den Shell-übergeordneten Prozess tatsächlich auf, diese App zu starten). Der Befehl wird sofort zurückgegeben, während die gestartete App geöffnet wird. Sie können das Terminal schließen, ohne die gestartete Anwendung zu beenden.

KDE / Plasma

Für die KDE / Plasma-Shell lautet das Dienstprogramm kstart <name_of_executable>:

kstart dolphin /var/log 

GTK-basierte Muscheln

Sie können verwenden gtk-launch <base_name_of_desktop_file>:

gtk-launch firefox 

(vorausgesetzt, Sie haben ein firefox.desktop).

Interessant - aber dann müsste ich mich je nach Desktop an eine andere Methode erinnern. (Ich verwende Zimt und Xfce.) Robert Pollak vor 6 Jahren 0
Mache ein (anderes) Skript auf jedem ... xenoid vor 6 Jahren 0
0
Shnkc

Ich benutze byobuzu diesem Zweck.

  1. Erster Lauf byobu
  2. byobuFühren Sie dann auf einer virtuellen Registerkarte von Ihren Befehl aus
  3. Selbst wenn Sie das Terminal schließen, byobuist Ihr Befehl auch aktiv, da der Prozess aktiv ist.
  4. Um wieder zu Ihrem Befehl zu gelangen, öffnen Sie ein Terminal und rufen Sie an byobu. Alle virtuellen Registerkarten, einschließlich derjenigen, die Ihren Befehl enthält, werden wiederhergestellt.