background jobs and ssh connections
Posted
by
petrelharp
on Super User
See other posts from Super User
or by petrelharp
Published on 2013-10-19T20:09:32Z
Indexed on
2013/10/19
22:00 UTC
Read the original article
Hit count: 295
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.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?
© Super User or respective owner