Как найти открытые глобальные дескрипторы файлов в Perl-программе

Я только что обнаружил проблему, при которой мне пришлось закрыть все открытые дескрипторы файлов, чтобы мой cgi-скрипт Apache продолжил работу. Я отследил проблему до Parse :: RecDescent.

#!/usr/bin/env perl

use strict;
use warnings;
use feature qw/say/;
$|++;

print "Content-Type: text/plain\n\n";

use Parse::RecDescent;

say "$$: pre-fork: ". time;

if(my $pid = fork) {
    # parent
    say "$$: return immediately: ". time;
}
else {
    # child 
    say "$$: kicked off big process: ". time;
    close STDIN;
    close STDOUT;
    close STDERR;
    # close *{'Parse::RecDescent::ERROR'};
    sleep 5;
}

У меня вопрос: как найти все дескрипторы файлов открытых пакетов?

Я знаю, что fileno вернет счетчик для дескрипторов открытых файлов. Есть ли способ выполнить обратный поиск для них или закрыть дескрипторы файлов по их счетчику fileno ?

5
задан tshepang 25 February 2014 в 18:49
поделиться