I'm trying to write a mail program which might contain data that a user wouldn't want to lose upon a broken SSH/telnet connection. Would SIGHUP be sent to the process? After all, it's the "hangup" signal...
Asked
Active
Viewed 607 times
1
sadljkfhalskdjfh
- 157
- 7
-
It depends - see for example [In which cases is SIGHUP not sent to a job when you log out?](84737). – Thomas Dickey Dec 10 '15 at 14:23
-
@Thomas, ITYM [In which cases is SIGHUP not sent to a job when you log out?](http://unix.stackexchange.com/q/84737). (yes, I agree it's a real pain to link to other questions in comments). – Stéphane Chazelas Dec 10 '15 at 14:33
-
Depends if a pty is used. So with telnet yes, with ssh, only for interactive sessions or if passed -t/-tt – Stéphane Chazelas Dec 10 '15 at 14:35
-
odd - it looked okay after I saved the edit. – Thomas Dickey Dec 10 '15 at 14:37
-
@Thomas, just found [SE Comment Link Helper](https://stackapps.com/q/2378), testing just now (edit: it works!) – Stéphane Chazelas Dec 10 '15 at 14:51
1 Answers
1
By default the process will be sent a SIGHUP. The default signal handler (trap) will shutdown the program relatively gracefully, but won't save the users work.
In your case, I would have the program include a trap routine that saves the user's work when a SIGHUP is received. You can catch and handle all signals except SIGKILL. You may also want to run the same routine for a SIGTERM interupt.
There are other mechanisms that can be used to avoid getting a SIGHUP signal, but handling the signal is the simplest and safest. If the other approachs fail, or a SIGHUP is sent with the kill command your process would still shutdown without saving the work.
BillThor
- 8,887
- 22
- 27
-
With `ssh host 'cmd'`, `cmd` won't get a SIGHUP if the connection drops. `cmd` could get a SIGPIPE if it tries to write something on stdout/stderr after the connection has dropped (with openssh, there are issues with that when using connection sharing). – Stéphane Chazelas Dec 10 '15 at 14:55