[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: HUP doesn't send to processes when logout



ƽÌ캫 wrote:
2008/12/30, Rick Stevens <ricks nerd com>:
Jerry Feldman wrote:
On 12/29/2008 04:56 PM, ƽÌ캫 wrote:
2008/12/30, Jerry Feldman <gaf blu org>:

On 12/29/2008 10:05 AM, ƽÌ캫 wrote:

hi,

It seems that when I logout from the console, the background process
doesn't get HUP signal:
{ trap "echo Ignore HUP >>/tmp/trap.out" 1; while sleep 3;do echo
hello >>/tmp/hello.txt;done; }&
And it seems it will become a daemon and run forever until rebooting.
Is this correct? Why it didn't get HUP signal?

Thanks!



Are you running this from a terminal window?

I am running this in tty2, a console. I just type those into the
console and run it, then logout.


Are you possibly setting nohup in your environment.

It seems it is. But how?


Are you typing the above commands directly? What happens if you place
these into a script and run the script in the background?

There are a number of things that can cause a shell script to ignore the
HUP signal. I tested this as a script on an Ubuntu laptop, and it
behaved the same as yours:

The process remained. So the issue is not that exiting the parent
process (GNOME Term) or logging out of GNOME fails to issue a HUP, it is
that the process itself ignores the HUP signal since I sent a "kill -HUP
<pid>" to the process.

If you simply send the HUP signal, you will see that "Ignore HUP" will
appear in /tmp/trap.out".


I have the same results with you.


The signal(1) command is probably the culprit, though the man pages are
vague.


I suspect of that maybe the logout doesn't send out HUP to these
background processes?

After looking at this again now that I understand the specific issue. I
would agree.
By default, the "huponexit" option is NOT set on bash shells, so a
terminating interactive shell does NOT send HUPs to background
processes.


Thank you very much for pointing this out.

Try it again, but run "shopt -s huponexit" before executing the
background process.  When you log out, HUPs should be sent to child
processes.

Yes, I have seen the HUP signal being sent to the background process
if set the "huponexit".

But even though i ignore HUP in the background process, it quits every
time when logout, after
echo a line of "Ignore HUP" to /tmp/trap.out. What's wrong?

Because while a logout doesn't send a HUP unless huponexit is set, it
DOES send a TERM signal which should terminate child processes.  You
need to trap that signal as well or use a "disown" on the PID of the
child process to disassociate it from the login shell.
----------------------------------------------------------------------
- Rick Stevens, Systems Engineer                      ricks nerd com -
- AIM/Skype: therps2        ICQ: 22643734            Yahoo: origrps2 -
-                                                                    -
-            "You think that's tough?  Try herding cats!"            -
----------------------------------------------------------------------


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]