Clarification on signals (sighup), jobs, and the controlling terminal
- by asolberg
So I've read two different perspectives and I'm trying to figure out which one is right.
1) Some sources online say that signals sent from the controlling terminal are ONLY sent to the foreground process group. That means if want a process to continue running in the background when you logout it is sufficient to simply suspend the job (ctrl-Z) and resume it in the background (bg). Then you can log out and it will continue to run because SIGHUP is only sent to the foreground job.
See: http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/
...In addition, if any signal-generating character is read by a
terminal, it generates the appropriate signal to the foreground
process group....
2) Other sources claim you need to use the "nohup" command at the time the program is executed, or failing that, issue a "disown" command during execution to remove it from the jobs table that listens for SIGHUP. They say if you don't do this when you logout your process will also exit even if its running in a background process group.
For example: http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm
...If I log out anyway, the shell sends my background job a HUP signal...
In my own experiments with Ubuntu linux it seems like 1) is correct. I executed a command: "sleep 20 &" then logged out, logged back in and pressed did a "ps aux". Sure enough the sleep command was still running.
So then why is it that so many people seem to believe number 2? And if all you have to do is place a job in the background to keep it running why do so many people use "nohup" and "disown?"