Here is a question I also posed on perlmonks.org... (http://www.perlmonks.org/?node_id=601464)
I am searching for a way to catch and handle a Control-C when using multiple POE sessions. I have successfully used the snippet from the POE Cookbook to actually catch the INT signal in each of my Sessions: inline_states => { _connected => sub { my ($kernel, $session) = @_[KERNEL, SESSION]; ## Handle control-C $kernel->sig( INT => 'event_sigint' ); ... } # inline_states ... event_sigint => sub { my ($kernel, $session) = @_[KERNEL, SESSION]; print STDERR "Caught Control-C, shutting down gracefully.\ +n"; $kernel->yield("Shutdown",2,'Received break from user'); }, # event_sigint In all but one of my sessions I simply catch the signal and print to STDERR a simple message giving the session alias. The above snippet is in only one of my sessions and I want to use it to do the graceful shutdown. However, I am using POE::Component::SimpleDBI, which uses POE::Wheel::Run to fork a child process that does the 'heavy-lifting' as the POD puts it. What is happening is that somewhere in POE's reaping of the child process(es) created by POE::Component::SimpleDBI, the POE kernel itself is (or seems to be) stopping in its tracks, that is, it ends without any fanfare. The last thing I see on the screen before the kernel ends is this: !!! Child process PID:6326 reaped: Things I have tried: #1 - manually adding an INT handler to SimpleDBI.pm #2 - perusing kernel.pm and signals.pm for clues I confess to the monks that this challenge is beyond me and I humbly submit the question for your review: is there a way to have POE reap the child process without dying immediately thereafter, allowing me to yield a shutdown subroutine to do the cleanup and exit? Many thanks, -MC