Zentara wrote:

> On Thu, 12 Dec 2002 17:43:34 +0100, [EMAIL PROTECTED]
> (Olivier Moulene) wrote:
> 
>>I have the pid of one running process and i want to kill it and all its
>>children. What can i do to know the pids of every children ?
> 
> This untested code from perlmonks.org, it might give you some ideas.
> What you are after is in the killchd subroutine.
> ##############################################################
> #!/usr/bin/perl
> use warnings;
> use strict;
> 
> #by robau of perlmonks
> #This subroutine takes two arguments, the parent process ID
> #and the numeric signal to pass to the processes
> #(which would be 9 if you wanted to issue a -TERM).
> #Using Proc::Process you could find the process ID
> #of the process login -- zentara with something similar
> #to the following :
> 
> my $proc = Proc::ProcessTable->new;
> my @ps = map { $_->pid if ($_->cmndline =~ /login -- zentara/) }
> @{$proc->table};
> &killchd($_, 9) foreach @ps;
> 
> #killchd(9895, 9);
> #kill -9  process 9895
> 
> sub killchd ($;$) {
> use Proc::ProcessTable;
> my $sig = ($_[1] =~ /^\-?\d+$/) ? $_[1] : 0;
> my $proc = Proc::ProcessTable->new;
> my %fields = map { $_ => 1 } $proc->fields;
> return undef unless exists $fields{'ppid'};
> foreach (@{$proc->table}) {
> kill $sig, $_->pid if ($_->ppid == $_[0]);
> };
> kill $sig, $_[0];
> };
> ###########################################################

checkout Proc::Killfam in CPAN

killfam accepts the same arguments as the Perl builtin kill command, but, 
additionally, recursively searches the process table for children and kills 
them as well.

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to