Nohup und disown

Mai 26, 2012·
Julio Batista Silva
Julio Batista Silva
· 2 Min Lesezeit

Beim Logout oder exit sendet das System ein SIGHUP an die Shell, die ihre Child‑Prozesse beendet. Historisch kommt das von Modems: „Auflegen“ → Hangup → SIGHUP.

Oft wollen wir aber einen Prozess weiterlaufen lassen, auch nach dem Logout – ohne gleich Screen oder Tmux zu nutzen.

Nohup

nohup macht einen Prozess SIGHUP‑resistent.

Unter Bash genügt:

julio@julio-acer ~ $ nohup dropboxd &

Im ZSH bleibt dennoch ein Job hängen:

julio@julio-acer ~> nohup dropboxd &
  [1] 13434
  nohup: ignoring input and appending output to ‘nohup.out’
julio@julio-acer ~> exit
  zsh: you have running jobs.

Lösung: Streams umleiten, dann in den Hintergrund schicken:

julio@julio-acer ~> nohup dropboxd &> /dev/null < /dev/null &!
julio@julio-acer ~> exit

disown

Wenn ein Prozess bereits läuft, kann man ihn vom aktuellen Shell‑Job‑Table lösen. In Bash und ZSH mit disown. Danach beendet exit den Job nicht.

julio@julio-acer ~> dropboxd
^Z
[1]  + 23042 suspended  dropboxd
julio@julio-acer ~> bg %1
[1]  + 23042 continued  dropboxd
julio@julio-acer ~> jobs
[1]  + running    dropboxd
julio@julio-acer ~> disown %dropboxd
julio@julio-acer ~> jobs
julio@julio-acer ~> ps 23042
  PID   TTY      STAT   TIME  COMMAND
  23042 pts/7    SNl    0:02  /opt/dropbox/dropbox

julio@julio-acer ~> exit

Auszug aus man bash:

disown [-ar] [-h] [jobspec …] … Mit -h wird SIGHUP für den Job unterdrückt (Bash‑spezifisch).

Man kann disown auch direkt beim Start nutzen – ähnlich wie nohup, oft praktischer:

julio@julio-acer ~> dropboxd& disown && exit
Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus