#!/usr/bin/env perl use warnings; use strict; print "[$$] Starting main program\n"; my @childs; for my $count (1..3) { if ( my $pid = fork ) { # parent print "[$$] child pid is $pid\n"; push @childs, $pid; } elsif ( defined $pid ) { # child sub1($count); exit 0; } else { die "[$$] couldn't fork: $!" } } for my $pid (@childs) { my $tmp = waitpid($pid, 0); print "[$$] done with pid $tmp\n"; } print "[$$] End of main program\n"; sub sub1 { my $num = shift; print "[$$] started child process for $num\n"; sleep $num; print "[$$] done with child process for $num\n"; return $num; }