swares has asked for the wisdom of the Perl Monks concerning the following question:
# The signal handler -[task_result] Child process in wheel 8 wrote to STDOUT: HASH(0x9b22c94 +) [task_result] Result for cmd: 32240\Kb (1.5%). [irc_bot_msg] I said '[task_result] Result for cmd: 32240\Kb (1.5%).' +to swares [task_close] Child 30750 has finished. [on_child] We have lost our children! (POE::Session=ARRAY(0x8fcf1a0)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9adc6d0)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9ad16c4)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9b231f8)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9b23a50)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9ad8d1c)) [on_child] We have lost our children! (POE::Session=ARRAY(0x9adb2e8)) [bot_stop] Stopping. Can't call method "PID" on an undefined value at ./cookbot.pl line 169 +4.
Where I call the code -# handler for child processes (forking job server) $kernel->sig( CHLD => "task_close" );
Here's the task_close event handler -my $task = POE::Wheel::Run->new( Program => sub { &{$this_code} }, ProgramArgs => \@program_args, StdoutFilter => POE::Filter::Reference->new(), StdinEvent => 'task_stdin', # Flushed all data to the child's +STDIN. StdoutEvent => 'task_result', # Received data from the child's +STDOUT. StderrEvent => 'task_debug', # Received data from the child's S +TDERR. # ErrorEvent => 'task_error', # An I/O error occurred. CloseEvent => 'task_close', # Child closed all output handle +s. ); $heap->{task}->{ $task->ID } = $task;
# Child close event sub task_close { my ($heap, $wheel_id) = @_[HEAP, ARG0]; my $result = $_[ARG0]; my $child = $heap->{task}->{$wheel_id}; print "[task_close] Child ", $child->PID, " has finished.\n"; $child = delete $heap->{task}->{$wheel_id}; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: POE::Wheel::Run task_close handler problems.
by bingos (Vicar) on Apr 19, 2007 at 05:50 UTC |