процесс open3 протекает? - PullRequest
0 голосов
/ 18 мая 2011

Я нашел комментарий , который намекает на проблему, которую, как мне кажется, я вижу, в которой fork ed дочерний элемент IPC :: Open3 выполняет основной программный кодвместо того, чтобы просто exec делать так, как я ожидал.

Есть ли у кого-нибудь еще опыт "утечки" процессов из IPC :: Open3?Я посмотрел на исходный код библиотеки и не увидел ничего ужасно неправильного.

Это с Perl 5.8.4 (да, я знаю ... но он не может быть обновлен), работающим на Solaris 10.

1 Ответ

2 голосов
/ 18 мая 2011

Хотя с тех пор это было исправлено, open3 из 5.8.4 может выдать исключение от дочернего элемента, что означает, что и родитель, и дочерний элемент могут "возвращаться" из open3.

Пока выможет с этим справиться, это немного сложно. * Было бы проще заменить ваш IPC/Open3.pm на один от более нового Perl.

Еще лучше, если вам что-то не нужнона низком уровне, как IPC :: Open3, вы можете использовать модуль более высокого уровня, такой как IPC :: Run3 (проще) или IPC :: Run (более мощно).

* - как минимум,

my $parent_pid = $$;
my $pid = eval { open3(...) };
if (!$pid) {
    if ($parent_pid == $$) {
        # Exception in parent.
        die($@);
    } else {
        # Exception in child (pre-exec).
        print STDERR $@;
        _exit(255);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...