| Proc-ProcessTable documentation | Contained in the Proc-ProcessTable distribution. |
Proc::Killfam - kill a list of pids, and all their sub-children
use Proc::Killfam; killfam $signal, @pids;
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.
killfam 'TERM', ($pid1, $pid2, @more_pids);
kill, signal
| Proc-ProcessTable documentation | Contained in the Proc-ProcessTable distribution. |
$Proc::Killfam::VERSION = '1.0'; package Proc::Killfam; use Exporter; use base qw/Exporter/; use subs qw/get_pids/; use vars qw/@EXPORT @EXPORT_OK $ppt_OK/; use strict; @EXPORT = qw/killfam/; @EXPORT_OK = qw/killfam/; BEGIN { $ppt_OK = 1; eval "require Proc::ProcessTable"; if ($@) { $ppt_OK = 0; warn "Proc::ProcessTable missing, can't kill sub-children."; } } sub killfam { my($signal, @pids) = @_; if ($ppt_OK) { my $pt = Proc::ProcessTable->new; my(@procs) = @{$pt->table}; my(@kids) = get_pids \@procs, @pids; @pids = (@pids, @kids); } kill $signal, @pids; } # end killfam sub get_pids { my($procs, @kids) = @_; my @pids; foreach my $kid (@kids) { foreach my $proc (@$procs) { if ($proc->ppid == $kid) { my $pid = $proc->pid; push @pids, $pid, get_pids $procs, $pid; } } } @pids; } # end get_pids 1; __END__