Im folgenden Skript versuche ich herauszufinden, wie waitpid
funktioniert, aber es wartet nicht auf ssh
Prozess zu beenden. done
wird sofort gedruckt und nicht nach dem ssh
Prozess existiert.Warum warten Sie nicht, bis der Prozess beendet wird?
Frage
Wie ich waitpid
nur machen weiter, wenn die pid ich es verlassen haben, geben?
#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;
use POSIX ":sys_wait_h";
my $pm = Parallel::ForkManager->new(5);
my $pid = $pm->start;
my $p = $pid;
if (!$pid) {
system("ssh 10.10.47.47 sleep 10");
$pm->finish;
}
$p = qx(/usr/bin/pgrep -P $p);
print "ssh pid is $p\n";
my $kid;
do {
$kid = waitpid($p, 0);
} while $kid > 0;
print "done\n";
Ich habe auch versucht,
while (1) {
$p = kill 0, $p;
print "x";
sleep 1 if $p;
print "*";
last unless $p;
}
aber es erreicht nicht einmal die erste print
aus irgendeinem Grund und nie verlässt.