#!/usr/bin/perl #by Zaxo of perlmonks my @apps = ( [qw(/path/to/foo args of foo)], [qw(/path/to/bar args of it here)] ); #to avoid Zombies $SIG{CHLD} = 'IGNORE'; for (@apps) { defined(my $cpid = fork) or die $!; $cpid or exec {$_->[0]} @$_ or die $!; } exit 0; # the parent #If the apps don't run as daemons, you may need to have #them ignore SIGHUP or else call &POSIX::setsid so that #the parent's exit doesn't trigger an early demise of the kids. #### #!/usr/bin/perl my $child=fork(); # Spawn off a child if ($child>0) { #parent exec ($app1) || die "Could not exec $app1:$!"; exit(0); # Should never get here! } elsif ($child == 0 ) { # Child process exec ($app2) || die "Could not exec $app2:$!"; exit(0); # should never get here either } else { die "Could not fork! $!"; } # Evaluating $! will give you the reason you couldn't # spawn the exec'ed process.