2013-10-10 12 views
45

Nur von Bash zu Zsh umgeschaltet.Beenden Sie zsh, aber lassen Sie laufende Jobs offen?

In bash laufen Hintergrundaufgaben weiter, wenn die Shell beendet wird. Denn hier beispielsweise läuft weiter dolphin nach dem exit:

$ dolphin . 
^Z 
[1]+ Stopped     dolphin . 
$ bg 
[1]+ dolphin . & 
$ exit 

Dies ist, was ich als das Standardverhalten wollen.

Im Gegensatz dazu ist das Verhalten von zsh davor zu warnen, Jobs unter 10 auszuführen, dann schließen Sie sie, wenn Sie wieder . Zum Beispiel hier wird dolphin geschlossen, wenn das zweite exit -command verläßt tatsächlich die Schale:

% dolphin . 
^Z 
zsh: suspended dolphin . 
% bg 
[1] + continued dolphin . 
% exit 
zsh: you have running jobs. 
% exit 

Wie kann ich zsh Standardverhalten hier wie bash machen?

Antwort

46

Vom zsh documentation:

HUP

... In zsh, wenn Sie einen Hintergrund-Job ausgeführt haben, wenn die Shell beendet, wird die Shell übernehmen Sie, dass getötet werden soll; In diesem Fall wird ein bestimmtes Signal mit der Bezeichnung SIGHUP gesendet ... Wenn Sie häufig Jobs starten, die auch dann ausgeführt werden sollten, wenn die Shell beendet wurde, können Sie die Option NO_HUP setzen, und Hintergrundjobs bleiben in Ruhe.

So setzen nur die NO_HUP Option:

% setopt NO_HUP 
+9

Und scheinbar 'setopt NO_CHECK_JOBS' auch hinzufügen ... –

+0

Wenn Sie die Warnung nicht wollen, ja. –

17

habe ich gefunden, dass eine Kombination aus nohup, mit & und disown Werke für mich, wie ich will nicht dauerhaft Arbeitsplätze verursachen laufen wenn die Shell beendet wurde.

nohup <command> & disown 

Während nur & für mich in bash gearbeitet hat, fand ich, wenn nur nohup verwenden, & oder disown auf der Ausführung von Befehlen, wie ein Skript, das einen Java-Laufbefehl aufruft, würde der Prozess noch stoppen, wenn die Schale ist aufgeregt.

  • nohup macht den Befehl NOHUP und SIGHUP Signale aus der Schale durch ein Argument (der Index der Auftragsnummer in Ihren Jobs gefolgt
  • & macht den Prozess im Hintergrund läuft in einem Subterminal
  • disown ignorieren Liste) verhindert, dass die Shell ein SIGHUP Signal an untergeordnete Prozesse sendet. Wenn Sie disown ohne ein Argument verwenden, wird standardmäßig der letzte Job verwendet.

fand ich die nohup und disown Informationen bei this page und die & Informationen in this SO answer.

69

Starten Sie das Programm mit-

dolphin &! 

Die &! (or equivalently, &|) ist ein zsh spezifische Verknüpfung sowohl Hintergrundunddisown der Prozess, so dass die Schale austritt verlassen wird es läuft .

+2

Dies sollte die akzeptierte Antwort sein, da sie eine Lösung beantwortet, die spezifisch für zsh ist. –

Verwandte Themen