Nohup und disown
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