Earindil has asked for the wisdom of the Perl Monks concerning the following question:
OUTPUT:#!/bin/perl for ($i=0; $i<=10; $i++) { wait_for_a_kid() if keys %pid_to_node > 3; $pid = fork; if ($pid) { ## parent does... $pid_to_node{$pid} = $i; } else { print "$i $$\n"; local $SIG {ALRM} = sub { kill -15, $$ or die "kill: $!"; print "\tKilled PID $$\n"}; # Just SIGTERM eval { ## child does... setpgrp(0,0); exit !&Test; alarm 1; waitpid $pid => 0; }; } } ## final reap: 1 while wait_for_a_kid(); sub wait_for_a_kid { my $pid = wait; return 0 if $pid < 0; my $node = delete $pid_to_node{$pid} or warn("Why did I see $p +id ($?)\n"), next; } sub Test { sleep 10; }
0 1668 1 1669 2 1670 3 1671 Why did I see 1668 (0) 5 1811 6 1812 7 1813 8 1814 9 1920 10 1921
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Killing Forks
by jbert (Priest) on Aug 14, 2007 at 12:58 UTC | |
by Earindil (Beadle) on Aug 14, 2007 at 13:17 UTC | |
by jbert (Priest) on Aug 14, 2007 at 13:34 UTC | |
by Earindil (Beadle) on Aug 14, 2007 at 13:41 UTC | |
by Earindil (Beadle) on Aug 14, 2007 at 14:14 UTC | |
by jbert (Priest) on Aug 14, 2007 at 16:15 UTC | |
by cdarke (Prior) on Aug 14, 2007 at 16:18 UTC |