This question has come up quite a lot (really a lot), but I'm finding the answers to be generally incomplete. The general question is "Why does/doesn't my job get killed when I exit/kill ssh?", and here's what I've found. The first question is: How general is the following information? The following seems to be true for modern Debian linux, but I am missing some bits; and what do others need to know?
All child processes, backgrounded or not of a shell opened over an ssh connection are killed with SIGHUP when the ssh connection is closed only if the
huponexit
option is set: runshopt huponexit
to see if this is true.If
huponexit
is true, then you can usenohup
ordisown
to dissociate the process from the shell so it does not get killed when you exit. Or, run things withscreen
.If
huponexit
is false, which is the default on at least some linuxes these days, then backgrounded jobs will not be killed on normal logout.But even if
huponexit
is false, then if the ssh connection gets killed, or drops (different than normal logout), then backgrounded processes will still get killed. This can be avoided bydisown
ornohup
as in (2).There is some distinction between (a) processes whose parent process is the terminal and (b) processes that have stdin, stdout, or stderr connected to the terminal. I don't know what happens to processes that are (a) and not (b), or vice versa.
Final question: How can I avoid behavior (3)? In other words, by default in Debian backgrounded processes run along merrily by themselves after logout but not after the ssh connection is killed. I'd like the same thing to happen to processes regardless of whether the connection was closed normally or killed. Or, is this a bad idea?
Edit: Another, important way to keep jobs of being killed, that works (?) in either case is to run them through screen. But, the question is more about understanding when things get killed and when they don't: sometimes people want the jobs to be killed on logout, for instance.
More threads: - Clarification on signals (sighup), jobs, and the controlling terminal - https://serverfault.com/questions/117152/do-background-processes-get-a-sighup-when-logging-off - Continue SSH background task/jobs when closing SSH - Will a job put in background continue running after an SSH session is closed? - Prevent an already running background process from being stopped after closing SSH client - How can I start a process over SSH such that it will continue to run after I disconnect? - Unable to keep remote job running on OS X - Close SSH connection