jliv has asked for the wisdom of the Perl Monks concerning the following question:
I apologize in advance if this topic has been answered here or elsewhere already, but several Google searches haven't given me the info I'm looking for, so here we go...
I have a high-level deamon-like program that runs a suite of other programs and scripts and handles logging and such. The code has signal handling implemented (only for SIGINT) to close several processess, open files, etc., and all of that works great... for the most part. The issue is that this code has to exec itself after it has updated itself or its runtime configuration. Very early in the top-level code, the signal handler is (re)defined, so even in the cases where the code exec()s itself, it should re-establish the signal handler, but it isn't working as I think it should.
To summarize: If I run the code before it exec()s itself, the signal handling works fine...a Ctrl-C terminates everything cleanly. If I hit Ctrl-C after the code has exec()d itself, I get nothing. Here is how the signal handler is invoked:
$SIG{INT} = \&int_handler;
and here is the start of the function:I even have the signal handler re-establish itself in the signal handling function in case there is any funny/weird behavior.sub int_handler { print "\n\n\t\t\tWe caught SIGINT; we are shutting down now...\n"; $SIG{INT} = \&int_handler; ### OTHER STUFF ### exit(1); }
Any ideas on what I am missing or what I should be doing differently?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: signal handling in exec()'d code
by moritz (Cardinal) on Jan 25, 2010 at 11:43 UTC | |
by jliv (Initiate) on Jan 25, 2010 at 12:33 UTC | |
by jethro (Monsignor) on Jan 25, 2010 at 13:41 UTC | |
by jliv (Initiate) on Jan 25, 2010 at 14:38 UTC | |
|
Re: signal handling in exec()'d code
by rubasov (Friar) on Jan 25, 2010 at 11:46 UTC | |
|
Re: signal handling in exec()'d code
by afoken (Chancellor) on Jan 26, 2010 at 16:44 UTC | |
by ikegami (Patriarch) on Jan 26, 2010 at 18:02 UTC |