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

A better solution that doesn't involve using the module? Copypaste its source. Obviously it works.

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

Makeshifts last the longest.

  • Comment on Re: Update: Killing a process and, recursively, all its children

Replies are listed 'Best First'.
Re: Re: Update: Killing a process and, recursively, all its children
by bronto (Priest) on Aug 13, 2003 at 07:16 UTC
    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
      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";