Today I was logged in on my FreeNAS server to setup Duplicity backups. After initial success on a small dataset of about 100MB, I cloned my configuration to backup my long term storage dataset. It contains about 50GB of data - or so I thought. It turns out there’s over 500GB there.
I let the job run throughout the day, not minding it much. But then time comes to close my SSH connection, and I know what that means: the process will be killed. And I really do not want to kill this running backup.
I know about screen
. And tmux
. And nohup
. Even about <command> &
. But alas it’s too late for that.
Luckily, there’s solution to this (if you’re running Bash or Zsh at least, I didn’t do a compatibility chec).
1. Background your running process#
Your process is probably running in the foreground, so you’ll need to background it. There are two steps to this.
- Stop your process with
Ctrl-Z
. This basically pauzes the process, it does not kill it. - Background the process by issueing the
bg
command. This will continue the process where it left off in the background. No harm done.
2. Disown the process#
The final step is to use disown
to remove the job from the current shell. This means than when the shell is killed when you sign off, the process is not killed as well.
You can use jobs
(or jobs -l
on FreeBSD) to see a list of current jobs and their process ID. To disown a process, use disown -h <process id>
.
That’s all. Your process has now been removed from your shell session and is running happily in the background.
Bonus action: Background your process from another SSH session#
In case you can’t use Ctrl-Z
, you can log in with another SSH session and use the kill
command to stop and continue the process that way.
- Sign in with another session and use
ps
to find the process ID. kill -SIGSTOP <process id>
to stop the processkill -SIGCONT <process id>
to continue the process in the background.- Use
disown
as described above to disconnect the process from it’s parent shell process.
Disclaimer#
This approach does not with all processes, namely those that require access to the TTY to function. vim
is a good example of this. If you background Vim, it will be stopped and you cannot disown it.