$Proc::Killfam::VERSION
=
'1.0'
;
use
vars
qw/@EXPORT @EXPORT_OK $ppt_OK/
;
@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
;
}
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
;
}
1;