Programme im Hintergrund vom Terminal aus ausführen

121

Wie starte ich ein Programm im Hintergrund einer Shell, mit der Möglichkeit, die Shell zu schließen, während das Programm läuft? Nehmen wir an, meine Benutzeroberfläche hat Probleme oder aus irgendeinem Grund muss ich ein Programm aus dem Terminalfenster booten, sagen wir nm-applet :

nm-applet

Wenn es gestartet wird, belegt es den Vordergrund des Terminalfensters.

Gibt es eine einfache Möglichkeit, das Programm im Hintergrund auszuführen, ohne das Terminal offen zu lassen oder das gesamte Terminal zu belegen?

In diesem Zusammenhang habe ich einen Weg gefunden, Programme vom Terminal aus auszuführen und andere Eingaben zuzulassen, indem ich ein Ampersand ( & ) an den Befehl angehängt habe:

nm-applet &

Aber das ist nicht sehr nützlich, da alle im Terminal gestarteten Prozesse beendet werden, sobald das Terminal geschlossen ist.

    
OVERTONE 22.02.2012, 01:07

8 Antworten

155

Ich bin kürzlich zu setsid gekommen. Es sieht so aus, als ob Sie nur etwas vom Terminal ausführen, aber Sie können die Verbindung trennen (schließen Sie das Terminal) und es geht einfach weiter.

Dies liegt daran, dass der Befehl tatsächlich ausgibt und während die Eingabe an das aktuelle Terminal weitergeleitet wird, gehört er einem komplett anderen Elternteil (das bleibt bestehen, nachdem Sie das Terminal geschlossen haben).

Ein Beispiel:

setsid gnome-calculator

Ich bin auch ziemlich partiell zu disown , das verwendet werden kann, um einen Prozess vom aktuellen Baum zu trennen. Sie verwenden es in Verbindung mit dem Ampersand im Hintergrund:

gnome-calculator & disown

Ich habe auch gerade etwas über das Hervorbringen von Unterschalen mit Klammern gelernt. Diese einfache Methode funktioniert:

(gnome-calculator &)

Und natürlich gibt es nohup wie du erwähnt hast. Ich bin nicht wild über nohup , weil es eine Tendenz hat, in ~/nohup.out zu schreiben, ohne dass ich darum bitt. Wenn Sie sich darauf verlassen, könnte es für Sie sein.

nohup gnome-calculator

Und für die längerfristigen Prozesse gibt es Dinge wie screen und andere virtuelle Terminal-Muxer, die Sitzungen zwischen Verbindungen am Leben erhalten. Dies trifft wahrscheinlich nicht wirklich auf Sie zu, da Sie nur temporären Zugriff auf die Terminalausgabe haben möchten. Wenn Sie jedoch einige Zeit später zurückgehen möchten, sehen Sie wahrscheinlich die neuesten Terminalaktivitäten Wahl.

Das Internet ist voll von screen Tutorials, aber hier ist ein einfacher Schnellstart:

Oli 22.02.2012, 01:41
46

Hier sind die zwei Möglichkeiten, mit denen ich gehen würde. Erstens, nicht von einem Terminal aus; drücke Alt + F2 , um den Laufdialog zu öffnen und führe es von dort aus (ohne & amp;).

Führen Sie von einem Terminal aus

aus
nm-applet &

Aber schließen Sie das Terminal NICHT selbst. Das heißt, drücken Sie nicht die X-Taste zum Schließen, und verwenden Sie nicht die Datei - & gt; Verlassen Sie die Menüleiste. Wenn Sie das Terminal auf diese Weise schließen, sendet es ein HUP (Hang Up) -Signal an die Bash, die innerhalb dieses Kanals läuft, was wiederum das HUP-Signal an alle seine Kinder sendet (weshalb nohup in diesem Fall funktioniert).

>

Verlassen Sie stattdessen die Shell, indem Sie exit ausführen oder Strg + D drücken. Bash wird dann seine Kinder verleugnen, dann beenden und die Hintergrundprozesse noch laufen lassen. Und wenn bash beendet wird, hat das Terminal seinen untergeordneten Prozess verloren, also wird es auch geschlossen.

Alles gleichzeitig tun:

nm-applet & exit
    
geirha 23.02.2012 12:45
13

Wie Sie bereits erwähnt haben, können Sie

ausführen
nohup nm-applet &  

ignoriert das Endsignal beim Schließen des Terminals. Kein Problem damit.

    
desgua 22.02.2012 01:17
10

Eine Sache, die viele andere Antworten fehlen, ist, wie man einen laufenden Prozess löst, der die Shell derzeit blockiert. In den meisten Terminals und Shells stoppt Strg + Z den laufenden Prozess und bringt Sie zurück zu einer Eingabeaufforderung. Dann können Sie

absetzen
bg

um den laufenden Prozess in den Hintergrund zu schicken. Problem

fg

stattdessen, um den laufenden Prozess wieder in den Vordergrund zu stellen.

BEARBEITEN : Weitere Details in dieser Antwort habe ich später entdeckt.

    
krlmlr 31.03.2015 16:37
6

Verwenden Sie (exec PROGRAM &> /dev/null & ) , damit die PID der Untershell von PROGRAM übernommen werden kann. Ich habe diesen Ansatz mehrfach mit verschiedenen Programmen getestet. Das Schließen des ursprünglichen Terminals hat keine Auswirkungen auf das neu erstellte Programm

Kleine Demo:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
Sergiy Kolodyazhnyy 30.11.2015 12:35
2

Ich kann das Byobu-Terminal empfehlen. Sie können Ihren Prozess einfach trennen, indem Sie die Taste F6 drücken.

    
speter 05.03.2013 01:07
1

Obwohl es oben gute Antworten gibt, möchte ich meine 2 Cent darüber geben, wie ich MATLAB im Hintergrund benutze.

sudo -b matlab

Das -b -Tag von sudo kann Anwendungen im Hintergrund ausführen. Sie können das Terminal auch schließen, nachdem Sie diesen Befehl ausgeführt haben.

Wahrscheinlich nicht verwandt, aber es gibt eine wunderbare Website, die Sie verwenden können, um Shell-Befehle zu erklären. Pfandrecht

    
user3342981 28.06.2016 16:39
0

Ich weiß nicht, dass es der richtige Weg ist, aber ich beginne einfach eine weitere Sitzung, während ich die vorherige allein lasse. Zum Beispiel habe ich einen einfachen Webserver auf meiner Himbeere laufen lassen. das web.py eins. Dann starte ich eine neue Sitzung und lasse sie in Ruhe. das ist es. Es ist auch sehr nützlich, da Sie immer noch aktualisiert werden, obwohl Sie in der anderen Sitzung arbeiten.

    
leo 06.07.2016 00:15

Tags und Links