Wie kann ich einen Befehl, den ich von der Shell aus gestartet habe, ausführen lassen, wenn ich mich von der Shell abmelde?

12

Welche Methoden gibt es, um einen Befehl, der von der Shell gestartet wurde, beim Ausführen zu belassen, nachdem Sie sich von der Shell abgemeldet haben?

NES
quelle

Antworten:

11
  • Um die Anwendung in den Hintergrund zu stellen, verwenden Sie &:

    command &
    
  • Wenn Sie das Terminal schließen möchten, und die Anwendung am Laufen zu halten, können Sie mehrere Optionen zur Verfügung : , und .screen Bildschirm installierendtach Installieren Sie dtachnohup

    nohup command &
    
  • Der Bildschirm ist hilfreich, da Sie eine Sitzung neu starten können und das Anhängen auch Spaß macht.

  • Weitere Informationen finden Sie unter den folgenden Links

karthick87
quelle
funktioniert das Hinzufügen eines &am Ende des Befehls nicht auch?
theTuxRacer
2
@ Kaustubh-P mit & ist oft eine gute Gewohnheit, um Terminals über den Befehl 'exit' zu schließen, ohne die Schaltfläche X close zu drücken. & Bewirkt, dass der Befehl im Hintergrund ausgeführt wird. Aber wenn die übergeordnete Shell geschlossen wird. das kann immer noch die Hintergrundprogramme zum Beenden zwingen.
karthick87
5

Verwenden Sie den Befehl nohup wie folgt:

nohup gedit /home/user/file.txt &
Javier Rivera
quelle
So entfernen Sie sogar nohup: Ignorieren von Eingaben und Weiterleiten von stderr an stdout
Amruth A
5

Ein nützlicher (bash?) Befehl ist disown. Das Schöne daran ist, dass es für einen bereits ausgeführten Job funktioniert (Sie lehnen übrigens Jobs ab, nicht Prozesse. Sie müssen also einen ctrl-Z, bgvor dem Ausführen von Disown für Ihren Job ausführen. Stellen Sie sich beispielsweise Folgendes vor:

local % ssh some.where.com
remote % verylongscript.sh

Jetzt ist dir klar, dass du gehen musst, aber nicht willst, dass das Skript beim Beenden getötet wird, also du

ctrl-Z
remote % bg
remote % disown
remote % exit
local %

Jetzt remoteläuft Ihr Skript noch.

Yossi Farjoun
quelle
1

ich benutze

nohup mycommand &

Um beispielsweise einen virtuellen VirtualBox-Server aufzurufen, gebe ich Folgendes in eine Remote-Shell ein (die ich dann schließe):

nohup VBoxHeadless --startvm "myvm" --vrdp=off &
Ivan
quelle