Предполагая, что дескриптор создан с помощью следующего кода:
use IO::File;
my $fh = IO::File->new;
my $pid = $fh->open('some_long_running_proc |') or die $!;
$fh->autoflush(1);
$fh->blocking(0);
, а затем прочитан с помощью такого цикла:
while (some_condition_here) {
my @lines = $fh->getlines;
...
sleep 1;
}
Что я должен указать как some_condition_here
, который вернет false, если процесс запущен другой конец конвейера завершился?
Тестирование для $ fh-> eof
не будет работать, поскольку процесс все еще может выполняться без вывода новых строк. Тестирование $ fh-> open
, похоже, не дает ничего полезного.
В настоящее время я использую $ pid =! waitpid ($ pid, WNOHANG)
, который, похоже, работает в POSIX-совместимых средах. Это лучший способ? А как насчет Windows?