Einfach von Bash auf Zsh umgestellt.
In Bash werden Hintergrundaufgaben weiterhin ausgeführt, wenn die Shell beendet wird. Zum Beispiel dolphin
läuft hier weiter nach exit
:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
Dies ist, was ich als Standardverhalten möchte.
Im Gegensatz dazu warnt zsh davor, Jobs auszuführen exit
, und schließt sie dann, wenn Sie es exit
erneut tun. Zum Beispiel wird hier dolphin
geschlossen, wenn der zweite exit
Befehl die Shell tatsächlich verlässt:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
Wie mache ich das Standardverhalten von zsh hier wie das von Bash?
Aus der zsh-Dokumentation :
Stellen Sie einfach die
NO_HUP
Option ein:quelle
Ich habe festgestellt, dass die Verwendung einer Kombination aus
nohup
,&
unddisown
für mich funktioniert, da ich nicht dauerhaft dazu führen möchte, dass Jobs ausgeführt werden, wenn die Shell beendet wird.Während nur
&
ich gerade in gearbeitet habebash
, habe ich festgestelltnohup
, dass der Prozess beim Beenden der Shell immer noch angehalten wird, wenn ich nur Befehle verwende&
oderdisown
Befehle wie ein Skript ausführe, das einen Java-Ausführungsbefehl aufruft.nohup
Lässt den Befehl ignorierenNOHUP
undSIGHUP
signalisiert von der Shell&
Lässt den Prozess im Hintergrund in einem Subterminal laufendisown
gefolgt von einem Argument (dem Index der Jobnummer in Ihrer Jobliste) verhindert, dass die Shell a sendetSIGHUP
Signal an untergeordnete Prozesse . Wenn Siedisown
ohne Argument verwenden, wird standardmäßig der neueste Job verwendet.Ich habe die
nohup
unddisown
Informationen auf dieser Seite und die&
Informationen in dieser SO-Antwort gefunden .quelle
Ich verwende normalerweise,
screen
um Hintergrundjobs am Laufen zu halten.1) Erstellen Sie eine Bildschirmsitzung:
2) Starten Sie Ihre Skripte, Dienste, Dämonen oder was auch immer
3) Beenden Sie die Bildschirmsitzung mit
oder Verknüpfung
ALT+A then d
Nach einigen hundert Jahren - wenn Sie Ihre Sitzung fortsetzen möchten (erneut anbringen):
Wenn Sie wissen möchten, ob es eine Bildschirmsitzung gibt, ihren Namen und ihren Status (angehängt oder getrennt):
Diese Lösung funktioniert auf allen Terminal-Interpreten wie Bash, Zsh usw. Siehe auch
man screen
quelle