in reply to Execute progams in parallel

Proc::Background

Replies are listed 'Best First'.
Re^2: Execute progams in parallel
by kalyanrajsista (Scribe) on Jan 20, 2010 at 09:28 UTC

    I'm interested in getting the PID of the commands, but program is printing the PID's after completion of the program we've executed from Proc::background.

    I'm working on Windows and when I check my Task Manager for all the processes, It is showing perl.exe processes but not my Perl programs.Any alternative to check if the program CreatePerson.pl or CreateCountry.pl are running or not.

    #!/usr/bin/perl use strict; use warnings; use Proc::Background; use Config; my $secure_perl_path = $Config{perlpath}; if ($^O ne 'VMS') {$secure_perl_path .= $Config{_exe} unless $secure_perl_path =~ m/$Config{_exe}$/i }; my $command1 = "$secure_perl_path $ENV{'source'}/src/CreatePerson.pl"; my $command2 = "$secure_perl_path $ENV{'source'}/src/CreateCountry.pl" +; foreach ( $command1, $command2 ) { my $proc = Proc::Background->new("$_ &"); print $proc->pid(),"\n"; }
      How about something like:
      #!/usr/bin/perl use strict; use warnings; use Proc::Background; use Config; my $secure_perl_path = $Config{perlpath}; if ($^O ne 'VMS') {$secure_perl_path .= $Config{_exe} unless $secure_perl_path =~ m/$Config{_exe}$/i }; my $command1 = "$secure_perl_path $ENV{'source'}/src/CreatePerson.pl"; my $command2 = "$secure_perl_path $ENV{'source'}/src/CreateCountry.pl" +; my @processes; foreach ( $command1, $command2 ) { my $proc = Proc::Background->new("$_ &"); push @processes, $proc; } while(1){ my $at_least_one_alive = 0; for my $proc(@processes){ if($proc->alive()){ print "'" . $proc->pid . "' is still alive"; $at_least_one_alive = 1; } sleep(1); #or however long you would like. } last if ! $at_least_one_alive; }

        Is there any way that I can get the return value like success or failure of the process that is executed