foreach my $server (@servers) { my $pid = $fork_manager->start; if ($pid) { eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm $timeout; my $rc = system("scp -p $file $user\@$server:$rpath/$fname"); }; } else { print "$$: child process started, with a key of $server ($pid)\n"; } $fork_manager->finish; } $fork_manager->wait_all_children();