2
我想等待两个进程(或更多)完成或计时器倒计时。计时器倒计时将在终端窗口中输出。例如:等待有超时的子进程
use warnings;
use strict;
use feature qw(say);
my $pid1 = fork();
if ($pid1 == 0) {
runTask1();
exit 0;
}
my $pid2 = fork();
if ($pid2 == 0) {
runTask2();
exit 0;
}
my $timer = startTimer();
say "Waiting for child processes..";
my $counter = 20;
my $i = 0;
while (1) {
my $pid = wait;
last if ($pid == -1);
if ($pid == $timer) {
$counter--;
say $counter;
$timer = startTimer();
} else {
say "Child with PID=$pid finished..";
$i++;
last if $i == 2;
}
}
say "Done.";
sub startTimer {
my $pidTimer = fork();
if ($pidTimer == 0) {
sleep 1;
exit 0;
}
return $pidTimer;
}
sub runTask1 {
sleep 10;
exit 0;
}
sub runTask2 {
sleep 5;
exit 0;
}
我对这种方法表示担心的是,我创建了一个分叉子进程的计时器,这似乎有点小题大做。这是必要的,还是有一个更简单的方法?
谢谢,这个完美的作品。我使用了'$ SIG {ALRM} = sub {$ counter--;说$ counter;报警1};'它就像一个魅力:) – 2014-08-29 11:09:35