【发布时间】:2015-02-24 22:38:21
【问题描述】:
在下面的脚本中,我试图弄清楚waitpid 的工作原理,但它不会等待ssh 进程退出。 done 会立即打印,而不是在ssh 进程存在之后打印。
问题
如何让waitpid 仅在我提供的 pid 退出时继续?
#!/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";
我也试过
while (1) {
$p = kill 0, $p;
print "x";
sleep 1 if $p;
print "*";
last unless $p;
}
但由于某种原因,它甚至没有到达第一个 print 并且永远不会退出。
【问题讨论】: