Um zu vermeiden, dass Exit-Signale an untergeordnete Prozesse des Terminals und der Shell weitergegeben werden, führen Sie den Befehl folgendermaßen aus nohup:
Das ist die richtige Antwort. Ohne nohup wird der gestartete Prozess immer noch als "Kind" des Terminalprozesses betrachtet und somit abgebrochen, wenn das Terminal geschlossen wird.
Izzy
3
cmd & disownfunktioniert auch, da das &wie ein ;Befehlstrennzeichen behandelt wird . Der Befehl disown entfernt die Verbindung zwischen der Bash-Shell-Sitzung und dem Befehl backgrounded.
Lornix
2
zsh hat eine Abkürzung für diese: cmd &|.
Thor
Damit dies funktioniert, musste ich eine Einstellung in Terminal.app ändern. Unter Profile, wählen Sie Ihr aktives Profil, dann Shell> Wenn die Shell beendet> Schließen , wenn die Schale sauber verlassen
antoine
6
Verwenden von screen:
screen -S <session name> -d -m <your command>
Danach können Sie das Terminal verlassen und eine erneute Verbindung herstellen, indem Sie:
Wenn Sie nach dem Verlassen des Terminals etwa jede Sekunde einen bestimmten Befehl oder eine bestimmte Datei im Hintergrund ausführen möchten, können Sie diese einfache Kleinigkeit ausprobieren.
"nohup" wird bereits von der akzeptierten Antwort abgedeckt. Und ich bin mir ziemlich sicher, dass der Fragesteller cron erwähnt hat, weil er damit "Führen Sie diesen Befehl in einigen Sekunden in der Zukunft aus" und nicht in regelmäßigen Abständen aus.
David Richerby
1
Meine Antwort macht die Sache nicht schlimmer. Sehen Sie den Punkt der Abstimmung nach unten. Neuronale würde ausreichen.
In diesem Fall wird der Prozess beim Schließen des Terminals durch gestartet, /home/your/script.shda er nicht von seinem "übergeordneten", sondern nur "im Hintergrund" getrennt wurde. Verwenden Sie nohup, um es für echte abzunehmen.
Izzy
Meine schlechte, ich wusste nichts davon, aber als ich auf meinem Debian getestet habe, wurde der Befehl weiter ausgeführt, nachdem die Shell geschlossen wurde, die ihn gestartet hat: /
Flinth
1
Ich bin nicht sicher, wo genau der Hintergrundprozess hängt und wann. Wenn Sie sich jedoch beispielsweise bei einem Remotecomputer anmelden, wird dieser definitiv gestoppt, sobald Sie sich abmelden (es sei denn, er hat sich selbst als Daemon deklariert ). Um 100% sicher zu sein, verwenden Sie lieber nohup-, das auch alle (jetzt unsichtbaren) Ausgaben in einer Datei mit dem Namen protokolliert, die nohup.outsich in dem Verzeichnis befindet, von dem aus Sie den Befehl gestartet haben.
Izzy
Okay, danke für deine Erklärungen ^^
Flinth
Diese Antwort könnte in Kombination mit dem jobsBefehl in Ordnung sein. Sehr oft möchte ich in der Lage sein, nach dem Hintergrund des Shell-Prozesses wieder zum Shell-Prozess zurückzukehren.
Antworten:
Um zu vermeiden, dass Exit-Signale an untergeordnete Prozesse des Terminals und der Shell weitergegeben werden, führen Sie den Befehl folgendermaßen aus
nohup
:quelle
cmd & disown
funktioniert auch, da das&
wie ein;
Befehlstrennzeichen behandelt wird . Der Befehl disown entfernt die Verbindung zwischen der Bash-Shell-Sitzung und dem Befehl backgrounded.cmd &|
.Verwenden von
screen
:Danach können Sie das Terminal verlassen und eine erneute Verbindung herstellen, indem Sie:
Weitere Infos: Referenz
quelle
Wenn Sie nach dem Verlassen des Terminals etwa jede Sekunde einen bestimmten Befehl oder eine bestimmte Datei im Hintergrund ausführen möchten, können Sie diese einfache Kleinigkeit ausprobieren.
Das würde scipt.sh alle 5 Sekunden ausführen.
quelle
Fügen Sie nach Ihrem Befehl ein "&" ein.
z.B:
quelle
/home/your/script.sh
da er nicht von seinem "übergeordneten", sondern nur "im Hintergrund" getrennt wurde. Verwenden Sienohup
, um es für echte abzunehmen.nohup
-, das auch alle (jetzt unsichtbaren) Ausgaben in einer Datei mit dem Namen protokolliert, dienohup.out
sich in dem Verzeichnis befindet, von dem aus Sie den Befehl gestartet haben.jobs
Befehl in Ordnung sein. Sehr oft möchte ich in der Lage sein, nach dem Hintergrund des Shell-Prozesses wieder zum Shell-Prozess zurückzukehren.