#!/usr/bin/perl -w my $can_fork = 1; # Можно ли делать повторный fork? my $num_processes = shift || 32; # количество процессов # Обработка завершения ребёнка sub REAPER { wait; $can_fork = 1; $SIG{CHLD} = \&REAPER; # loathe sysV } # Делаем fork, потом chikd завершается, а parent делает новый fork sub eat_resources() { while( 1 ) { if( $can_fork ) { $can_fork = 0; exit unless fork(); } } } # Основная программа -- делаем указаное количество fork'ов, в каждом из # которых запускаем пожиралку ресурсов for( my $i = 0; $i < $num_processes; $i++ ) { if( !fork() ) { $SIG{CHLD} = \&REAPER; eat_resources(); } } while( 1 ) { }