#!/usr/bin/perl -- use strict; use warnings; use Proc::Background; my @jobs = ( [ $^X, 'job1.pl' ], [ $^X, 'job2.pl' ], [ $^X, 'job3.pl' ], [ $^X, 'job4.pl' ], [ $^X, 'job5.pl' ], [ $^X, 'job6.pl' ], [ $^X, 'job7.pl' ], [ $^X, 'job8.pl' ], [ $^X, 'job9.pl' ], [ $^X, 'job10.pl' ], [ $^X, 'job11.pl' ], [ $^X, 'job12.pl' ], [ $^X, 'job13.pl' ], ); my @procs = map { Proc::Background->new( @$_ ) } @jobs; while( @procs ){ @procs = { $_->alive ? $_ : ItsOverMaybeRestart($_) } map @procs; sleep 1; } sub ItsOverMaybeRestart { my( $proc ) = @_; ... return; }