On Mon, Mar 02, 2009 at 11:47:09AM +0100, jorge sanchez wrote: > Hi list, > > I have one question regarding the POE::Wheel::Run kill method, > according to the cpan.org page this method delivers signal to the > child process. > We are using the POE::Wheel::Run to spawn child which then spawns > another childs in the chain. We also are using sort of watchdog timer > which sends SIGKILL signal to the child if it takes too long to > accomplish its task to take it down. > > The problem is that if we kill the child which has spawn other childs > and if we send SIGKILL signal to this child then the spawned childs > are reaped by init and are there outside of our controll. > > It would be very convenient to have also method to send the signal to > the process group id to take down all the processes within the same > process group.
Since version 1.0001 of POE, POE::Wheel::Run will use setpgrp() to change the process group of the spawned process ( but only if the Conduit type isn't 'Pty' or 'Pty-pipe' which uses setsid() to change the process group ). POE::Wheel::Run's kill() method basically uses perl's kill function under the hood so the advice from there stands (http://p3rl.org/kill). "Unlike in the shell, if SIGNAL is negative, it kills process groups instead of processes" $wheel->kill(9); # Send KILL signal to the wheel PID $wheel->kill(-9); # Send KILL signal to the wheel process group. On SystemV (like Solaris) you can also use negative process IDs kill( 9, $wheel->PID ); # Send KILL signal to the wheel PID kill( 9, '-' . $wheel->PID ); # Send KILL signal to the wheel process group. With the caveat from 'kill' documentation: "(On System V, a negative PROCESS number will also kill process groups, but that's not portable.)" Cheers, -- Chris Williams aka BinGOs PGP ID 0x4658671F http://www.gumbynet.org.uk ==========================
pgpOJXmwg49fG.pgp
Description: PGP signature
