Ich habe eine Antwort auf einen älteren Thread mit ähnlichen Themen mit Antworten aus verschiedenen Quellen gepostet . Es folgt eine Kopie dieser Antwort, die für diesen Thread angepasst wurde.
Folgende Arbeiten:
$ (gui_app &> /dev/null &)
Dies ist die Antwort von Nathan Fellman plus Weiterleitung.
"&> / dev / null" leitet sowohl stdout als auch stderr zum null-Gerät um. Das letzte kaufmännische Und bewirkt, dass der Prozess im Hintergrund ausgeführt wird. Die Klammern um den Befehl führen dazu, dass "gui_app" in einer Subshell ausgeführt wird.
Dadurch wird der "gui_app" -Prozess von der Konsole getrennt, von der aus Sie diesen Befehl ausführen. Selbst wenn Sie das Fenster schließen, in dem der übergeordnete Terminalemulator ausgeführt wird, wird "gui_app" nicht geschlossen. Ich habe dies ausgeführt und dann den Prozessbaum mit dem Befehl "pstree" angesehen und festgestellt, dass eine auf diese Weise gestartete Anwendung ein untergeordneter Prozess für "init" wird.
Zum Beispiel,
$ gui_app &> /dev/null &
führt die Anwendung im Hintergrund aus, wird jedoch zu einem untergeordneten Prozess des Konsolenprozesses und wird beendet, wenn Sie das Terminal schließen. (Obwohl das Terminal mit dem Befehl exit oder Strg-D durch Bash verlassen wird, kann Bash bereinigt werden, indem der Hintergrundprozess an init übergeben wird.)
"nohup" funktioniert wie von NawaMan vorgeschlagen, leitet jedoch Ausgabe und Fehler standardmäßig in eine Datei um. Wie JeffG geantwortet hat, kann der Befehl "disown" (falls in der Shell verfügbar) den Prozess vom Terminal trennen, nachdem Sie einen Hintergrundprozess gestartet haben:
$ gui_app &
$ disown
(Übrigens gilt das alles für Bash. Ich bin sicher, dass andere Shells andere Methoden / Syntax haben, um dies zu tun.)
Einige Verweise:
Prozesse ablehnen (UNIX Power Tools)
Wenn es ein einfacher Anruf auf eine GUI - Anwendung - ohne komplizierte Optionen und so - es scheint , einen Starter wie „gmrun“ mit oder dmenu (Warnung: laut Audio) ist auch eine gute Option. Binden Sie es an eine Tastenkombination. Ich benutze noch keinen Launcher, habe die beiden aber ausprobiert.
HINWEIS: CarlF in den Kommentaren der anderen Thread- Berichte GUI-Apps, die über die Methode "gui_app &" gestartet wurden, werden nicht geschlossen, wenn er das übergeordnete Terminal verlässt. Ich denke, wir haben das Terminal auf verschiedene Arten geschlossen. Ich habe das Fenster geschlossen, in dem der Terminalemulator ausgeführt wurde. Ich glaube, er hat den Terminalemulator möglicherweise über die Shell verlassen (Befehl exit oder Strg-D). Ich habe dies getestet und festgestellt, dass das Beenden durch Bash die GUI nicht anhält, die als Hintergrundprozess für das Terminal gestartet wurde, wie CarlF sagt. Es scheint, dass Bash-Hands-Off-Hintergrundprozesse initiiert werden, wenn die Möglichkeit zum Aufräumen besteht. Tatsächlich muss dies der Mechanismus sein, mit dem der in einer Subshell gestartete Hintergrundprozess an init übergeben wird.