/ / ¿Por qué obtengo 2 procesos cuando hago un fork? - linux, bash, perl

¿Por qué obtengo 2 procesos cuando hago un tenedor? - linux, bash, perl

Al ejecutar el siguiente código que utiliza Paralelo :: ForkManager Tengo dos procesos de sueño y no uno como se esperaba.

18748 pts/2    S+     0:00 /usr/bin/perl ./fork.pl
18749 pts/2    S+     0:00 /usr/bin/perl ./fork.pl
18750 pts/2    S+     0:00 sleep 12345
18751 pts/2    S+     0:00 sleep 12345

Y además no ejecuta el print ordena hasta el sleep comando sale Hubiera esperado que la secuencia de comandos de Perl continuaría cuando bifurque. ¿O me estoy perdiendo algo?

#!/usr/bin/perl
use Parallel::ForkManager;
my $pm = new Parallel::ForkManager(5);

my $pid = $pm->start;
system("sleep 12345");
print "pid inside $pidn";
$pm->finish;

print "pid outside $pidn";

Respuestas

1 para la respuesta № 1

Porque llamaste system en el padre y en el niño. Comprobar start"s devuelve el valor como se documenta.

#!/usr/bin/perl
use Parallel::ForkManager;

my $pm = Parallel::ForkManager->new(5);

my $pid = $pm->start;
if (!$pid) {
print "From child: $$n";
system("sleep 12345");
$pm->finish;
}

print "From parent: $$ $pidn";
$pm->wait_all_children();

Por supuesto, si no haces nada entre system y finish, bien podrías usar exec para obtener perl + sleep en lugar de perl + perl + sleep.

#!/usr/bin/perl
use Parallel::ForkManager;

my $pm = Parallel::ForkManager->new(5);

if (!$pm->start) {
exec("sleep 12345")
or die($!);
}

$pm->wait_all_children();