in reply to Re: Update: Killing a process and, recursively, all its children
in thread Killing a process and, recursively, all its children

Is there any reason you'd want to roll your own?

None, actually; Proc::Killfam does just what I was looking for. But there are so many modules on CPAN and so many experts Perl programmers here that I could well have missed a better module for the task that somebody here knew about. That was what I was asking for. But it seems that I already found the right one.

Ciao!
--bronto


The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
--John M. Dlugosz
  • Comment on Re: Re: Update: Killing a process and, recursively, all its children

Replies are listed 'Best First'.
Re^3: Update: Killing a process and, recursively, all its children
by yogi (Initiate) on Nov 13, 2006 at 21:26 UTC
    Hi, I needed to kill the child processes recursively and went through all the suggestions on this thread and the related. Thanks for everybody's input. While killfam is great, i wanted to see if there was a non module way of doing this(in our environment, i am discouraged to install modules unless its absolutely needed). So i have done it using setpgrp. I just want to share that here. Below is a sample:
    #!/usr/bin/perl -w use strict; use POSIX "WNOHANG"; setpgrp(0, 0); if(my $pid = fork) { #parent print "RESULT: $pid\n"; my $kid; my $count; do { $kid = waitpid(-1, WNOHANG); sleep 1; $count++; if ($count > 15) { print "I have waited too long. self destructin +g\n"; my $GID = getpgrp($pid); `kill -9 -$GID`; } } until $kid == $pid; } else { #child local $SIG{CHLD} = sub { wait() }; system("sleep 100"); exit; } print "I am all done\n";