Как узнать, что Процесс открытия канала завершен?

Предполагая, что дескриптор создан с помощью следующего кода:

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?

5
задан tshepang 22 April 2014 в 22:06
поделиться