Exit zsh, but leave running jobs open?

前端 未结 4 1019
温柔的废话
温柔的废话 2021-01-30 01:25

Just switched from bash to zsh.

In bash, background tasks continue running when the shell exits. For example here, dolphin continues running after the

相关标签:
4条回答
  • 2021-01-30 01:53

    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
    
    0 讨论(0)
  • 2021-01-30 01:53

    I typically use screen for keeping background jobs running.

    1) Create a screen session:

    screen -S myScreenName
    

    2) Launch your scripts,services,daemons or whatever

    3) Exit (detach) screen-session with

    screen -d
    

    or shortcut ALT+A then d


    After few hundreds of years - if you want to resume your session (reattach):

    screen -r myScreenName
    

    If you want to know if there's a screen-session, its name and its status (attached or detached):

    screen -ls
    

    This solution works on all terminal interpreters like bash, zsh etc. See also man screen

    0 讨论(0)
  • 2021-01-30 01:58

    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.

    0 讨论(0)
  • 2021-01-30 02:03

    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.

    0 讨论(0)
提交回复
热议问题