Proc::Killfam - kill a list of pids, and all their sub-children


Proc-ProcessTable documentation Contained in the Proc-ProcessTable distribution.

Index


Code Index:

NAME

Top

Proc::Killfam - kill a list of pids, and all their sub-children

SYNOPSIS

Top

 use Proc::Killfam;
 killfam $signal, @pids;

DESCRIPTION

Top

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.

EXAMPLE

Top

killfam 'TERM', ($pid1, $pid2, @more_pids);

KEYWORDS

Top

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__