Exit zsh, but leave running jobs open? Exit zsh, but leave running jobs open? bash bash

Exit zsh, but leave running jobs open?


Start the program with &!:

dolphin &!

The &! (or equivalently, &|) is a zsh-specific shortcut to both background and disown the process, such that exiting the shell will leave it running.


From the zsh documentation:

HUP

... In zsh, if you have a background job running when the shell exits, the shell will assume you want that to be killed; in this case it is sent a particular signal called SIGHUP... If you often start jobs that should go on even when the shell has exited, then you can set the option NO_HUP, and background jobs will be left alone.

So just set the NO_HUP option:

% setopt NO_HUP


I have found that using a combination of nohup, &, and disown works for me, as I don't want to permanently cause jobs to run when the shell has exited.

nohup <command> & disown

While just & has worked for me in bash, I found when using only nohup, &, or disown on running commands, like a script that calls a java run command, the process would still stop when the shell is exited.

  • nohup makes the command ignore NOHUP and SIGHUP signals from the shell
  • & makes the process run in the background in a subterminal
  • disown followed by an argument (the index of the job number in your jobs list) prevents the shell from sending a SIGHUP signal to child processes. Using disown without an argument causes it to default to the most recent job.

I found the nohup and disown information at this page, and the & information in this SO answer.