Stop worrying about your VPN connection dropping and your remote job to get kill. You can work on a remote server from your laptop or desktop in a safe and controlled way by detaching your screen session and reattaching later.
How to detach a running job from your shell session?
There is a couple of ways to achieve this. The easiest and most common one is probably to just send to background and disown your process. Use Ctrl+Z to suspend a program then bg
to run the process in background and disown
to detach it from your current terminal session. With the built-in bash job
call you can list all the existed backgrounded process, you can use fg
to run the process in foreground again as long as it didn’t get detached.
bg [jobspec ...]
Resume each suspended job jobspec in the background, as if it had been started with &. If jobspec is
not present, the shellβs notion of the current job is used. bg jobspec returns 0 unless run when job
control is disabled or, when run with job control enabled, any specified jobspec was not found or was
started without job control.
disown [-ar] [-h] [jobspec ...]
Without options, each jobspec is removed from the table of active jobs. If the -h option is given,
each jobspec is not removed from the table, but is marked so that SIGHUP is not sent to the job if
the shell receives a SIGHUP. If no jobspec is present, and neither the -a nor the -r option is sup-
plied, the current job is used. If no jobspec is supplied, the -a option means to remove or mark all
jobs; the -r option without a jobspec argument restricts operation to running jobs. The return value
is 0 unless a jobspec does not specify a valid job.
fg [jobspec]
Resume jobspec in the foreground, and make it the current job. If jobspec is not present, the
shellβs notion of the current job is used. The return value is that of the command placed into the
foreground, or failure if run when job control is disabled or, when run with job control enabled, if
jobspec does not specify a valid job or jobspec specifies a job that was started without job control.
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
The first form lists the active jobs. The options have the following meanings:
-l List process IDs in addition to the normal information.
-p List only the process ID of the jobβs process group leader.
-n Display information only about jobs that have changed status since the user was last notified
of their status.
-r Restrict output to running jobs.
-s Restrict output to stopped jobs.
If jobspec is given, output is restricted to information about that job. The return status is 0
unless an invalid option is encountered or an invalid jobspec is supplied.
If the -x option is supplied, jobs replaces any jobspec found in command or args with the correspond-
ing process group ID, and executes command passing it args, returning its exit status.
How to detach from your active terminal and reattach to a different session?
To detach the job from the current terminal and reattach later, you have few options. You can use a screen manager like
screen, the terminal multiplexer
tmux, or a wrapper for both like
byobu. Using screen
you will simply create a session before running your job using screen -D -R
, run your command and leave the screen session Ctrl+A d.
If you already started a process and forgot to run it in a screen
or tmux
session, then sent it to background and disown it as mentionned above. You could reattach it later from a different tty
using
retty or
reptyr. Note that retty
and reptyr
are generally not pre-installed on a Linux distribution.