Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: Execute progams in parallel

by kalyanrajsista (Scribe)
on Jan 20, 2010 at 09:28 UTC ( #818405=note: print w/ replies, xml ) Need Help??


in reply to Re: Execute progams in parallel
in thread Execute progams in parallel

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"; }


Comment on Re^2: Execute progams in parallel
Download Code
Re^3: Execute progams in parallel
by molecules (Monk) on Jan 20, 2010 at 16:36 UTC
    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

        You can get the exit status using the wait method as described in the documentation for Proc::Background:

        wait

        Wait for the process to exit. Return the exit status of the command as returned by wait() on the system. To get the actual exit value, divide by 256 or right bit shift by 8, regardless of the operating system being used. If the process never existed, then return an empty list in a list context, an undefined value in a scalar context, or nothing in a void context. This function may be called multiple times even after the process has exited and it will return the same exit status.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://818405]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (11)
As of 2014-07-10 19:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (215 votes), past polls