GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie starte ich GUI-Linux-Programme von der Befehlszeile aus, aber getrennt von der Befehlszeile?

& anhängen zur Kommandozeile:

emacs &

Dadurch wird emacs in den Hintergrund gestellt und Sie können Ihr Terminal weiter verwenden.

Beachten Sie, dass dies emacs immer noch als Unterprozess Ihres Terminals hinterlässt, und wenn Sie das Terminal verlassen, wird auch emacs beendet. Um dies zu vermeiden, geben Sie Folgendes ein:

(emacs &)

Die Klammern weisen das Terminal an, den emacs-Prozess vom Terminal zu trennen.

Dennoch werden stdout- und stderr-Meldungen des Programms auf dem Terminal angezeigt. Um dies zu verhindern, verwenden Sie:

(emacs &> /dev/null &)

Verwenden Sie nohup .So:nohup amarok &

Hoffe das hilft.


Ich habe eine Antwort auf einen älteren Thread zu einem ähnlichen Thema mit Antworten aus verschiedenen Quellen gepostet. Es folgt eine Kopie dieser Antwort, die für diesen Thread angepasst wurde.

Folgende Werke:

$ (gui_app &> /dev/null &)

Dies ist Nathan Fellmans Antwort plus Weiterleitung.

"&> /dev/null" leitet sowohl stdout als auch stderr auf das Null-Gerät um. Das letzte kaufmännische Und lässt den Prozess im Hintergrund laufen. Die Klammern um den Befehl führen dazu, dass Ihre "gui_app" in einer Subshell ausgeführt wird.

Dadurch wird der Prozess „gui_app“ von der Konsole getrennt, von der aus Sie diesen Befehl ausführen. Selbst wenn Sie das Fenster schließen, in dem der übergeordnete Terminal-Emulator ausgeführt wird, wird "gui_app" nicht geschlossen. Ich habe dies ausgeführt und mir dann den Prozessbaum mit dem Befehl "pstree" angesehen und festgestellt, dass eine auf diese Weise gestartete Anwendung zu einem untergeordneten Prozess von "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 Beenden des Terminals über Bash mit dem Exit-Befehl oder Strg-D Bash bereinigen lässt, indem der Hintergrundprozess an Init übergeben wird.)

"nohup" funktioniert wie von NawaMan vorgeschlagen, aber das leitet 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 all dies für Bash. Ich bin sicher, dass andere Shells andere Methoden/Syntax dafür haben.)

Einige Hinweise:Disowning Processes (UNIX Power Tools)

Wenn es sich um einen einfachen Aufruf einer GUI-Anwendung handelt - ohne komplizierte Optionen und dergleichen - scheint es auch eine gute Option zu sein, einen Launcher wie "gmrun" oder dmenu (Warnung:lautes Audio) zu verwenden. Binden Sie es an eine Tastenkombination. Ich verwende noch keinen Launcher, habe aber diese beiden ausprobiert.

HINWEIS:CarlF in den Kommentaren der anderen Threads berichtet, dass GUI-Apps, die über die Methode „gui_app &“ gestartet wurden, nicht geschlossen werden, wenn er das übergeordnete Terminal verlässt. Ich denke, dass wir das Terminal auf unterschiedliche Weise geschlossen haben. Ich habe das Fenster geschlossen, in dem der Terminal-Emulator ausgeführt wurde. Ich glaube, er hat den Terminal-Emulator möglicherweise über die Shell beendet (Beenden-Befehl oder Strg-D). Ich habe dies getestet und festgestellt, dass das Beenden durch bash die GUI nicht stoppt, die als Hintergrundprozess des Terminals gestartet wurde, wie CarlF sagt. Es scheint, dass Bash die Hintergrundprozesse von der Initialisierung abhält, wenn er die Möglichkeit hat, aufzuräumen. Tatsächlich muss dies der Mechanismus sein, durch den der in einer Subshell gestartete Hintergrundprozess an init übergeben wird.


Linux
  1. So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

  2. So führen Sie MySQL/MariaDB-Abfragen direkt von der Linux-Befehlszeile aus

  3. Linux – Wie starte ich eine Windows-Partition von der Grub-Befehlszeile aus?

  4. Wie rufe ich ein Openoffice-Makro von der Linux-Befehlszeile aus auf?

  5. Wie sende ich über die Befehlszeile in Linux eine Nachricht an meinen socket.io-Websocket?

So starten oder starten Sie den Linux-Server über die Befehlszeile neu

So suchen Sie Dateien im Terminal unter Linux

So suchen Sie nach Dateien über die Linux-Befehlszeile

Verzeichnis in Linux entfernen – So löschen Sie einen Ordner von der Befehlszeile aus

So verwalten Sie Dateien vom Linux-Terminal aus

So öffnen Sie eine URL im Webbrowser vom Linux-Terminal aus