When connecting remotely to a Linux server, all the processes or scripts started by you through the terminal run as long as you are connected to the server. As soon as you close the terminal, the processes started by you will get terminated.
I faced this issue when I was new to Linux servers. The naive me ran scripts through cronjobs and the issue was temporarily sorted out for me. It did not take long until I realized running scripts through cronjobs wasn’t feasible for everything. Eventually, I needed to run scripts that took hours to complete but needed to run on demand. So scheduling the script to run with cronjobs was not useful here.
After spending some time looking for a solution, I came across Tmux A very useful Linux package that enables users to run multiple virtual terminals on Linux. Tmux allows Linux users to run multiple terminal sessions and run separate processes on each of them. The user can easily switch between these terminals by detaching from one terminal session and attaching to another.
Thanks to Tmux I was able to run scripts and close the terminal without having to worry about the scripts being terminated. After reconnecting back to the server, I just have to connect to the specific tmux session and I can see how far the process has progressed. Tmux helped me save electricity costs which would have been wasted unnecessarily leaving the computer on while the script completed its job.
Close SSH Terminal without Killing Running Processes with Tmux
For all those who want to Close SSH Terminal without Killing Running Processes, here’s how you can do it with Tmux.
Tmux is compatible with most Linux operating systems. Since I am using Ubuntu, this guide will be demonstrated on the same operating system.
Here are the commands to install tmux on the respective operating systems:
|Arch Linux||pacman -S tmux|
|Debian or Ubuntu||apt install tmux|
|Fedora||dnf install tmux|
|RHEL or CentOS||yum install tmux|
|macOS (using Homebrew||brew install tmux|
|macOS (using MacPorts)||port install tmux|
|openSUSE||zypper install tmux|
Once installed, you can start a tmux session by entering tmux or tmux new in the terminal.
Each instance of tmux is called session. Tmux sessions can be managed by both shortcut keys or commands. Shortcuts can come very useful when there are programs running in the tmux sessions. By default, the tmux sessions will be named as numbers starting from 0. You can name an instance by setting a value for the -s flag.
tmux new -s mysession
You can detach from a tmux instance by pressing the Ctrl + B D keys.
To view a list of all running tmux sessions you can use one of the following commands.
tmux ls tmux list-sessions
You can easily attach to any of the sessions by typing the following command with the tmux instance number.
tmux attach -t mysession
Session can killed with the following commands
tmux kill-ses -t mysession
With tmux, you can now close SSH Terminal without worrying about the running processes being killed on linux.
I recall many situtations when my internet connection got disconnected and thanks to tmux, the script kept running on this server. Without tmux, the terminal would have closed and so would have been the running process. Another great about tmux is, multiple users can access the same tmux session and check the progress of the script, which wouldn’t not have been possible using the terminal on linux.