How Do I Keep A Process Running After I Logout

What if you're connecting to a Linux machine through SSH, and you're trying to run a heavy bash script that makes filesystem operations. It's expected to keep running for hours, but you cannot leave the SSH session open.

The best method is to start the process in a terminal multiplexer. Alternatively you can make the process not receive the HUP signal.

A terminal multiplexer provides "virtual" terminals which run independent from the "real" terminal (actually all terminals today are "virtual" but that is another topic for another day). The virtual terminal will keep running even if your real terminal is closed with your ssh session.

All processes started from the virtual terminal will keep running with that virtual terminal. When you reconnect to the server you can reconnect to the virtual terminal and everything will be as if nothing happened, other than the time which passed.

Two popular terminal multiplexers are screen and tmux.

Screen has a steep learning curve. Here is a good tutorial with diagrams explaining the concept:

The HUP signal (or SIGHUP) is sent by the terminal to all its child processes when the terminal is closed. The common action upon receiving SIGHUP is to terminate. Thus when your ssh session gets disconnected all your processes will terminate. To avoid this you can make your processes not receive SIGHUP.

Two easy methods to do so are nohup and disown.

For more information about how nohup and disown works read this question and answer:

Note: although the processes will keep running you can no longer interact with them because they are no longer attached to any terminal. This method is mainly useful for long running batch processes which, once started, no longer need any user input.

If you have any comments, feel free to post them below or find us on Twitter and Facebook!

- Until next time!

November 27 2019

Add or review comments

Please leave your comment

Existing comments

Comments 0