Как мне управлять несколькими подпроцессами в Perl? - PullRequest
5 голосов
/ 24 февраля 2010

У меня есть программа на Perl, которая должна запускать одновременно около полудюжины программ в фоновом режиме и ждать, пока они не завершатся, прежде чем продолжить. Также очень важно, чтобы статус выхода каждого мог быть зафиксирован.

Есть ли распространенная идиома для этого в Perl? В настоящее время я думаю об использовании потоков.

Ответы [ 2 ]

8 голосов
/ 24 февраля 2010

Не используйте темы. Темы отстой. Правильный способ - это fork несколько процессов и wait для их завершения. Если вы используете wait или waitpid, статус завершения рассматриваемого процесса будет доступен в $?.

См. Perldocs для fork , wait и waitpid , а также примеры в этом потоке SO.

Если все, что вам нужно, это просто управлять пулом подпроцессов, который не превышает определенного размера, посмотрите превосходный Parallel :: ForkManager .

2 голосов
/ 24 февраля 2010

Обычно вы должны выполнить fork + exec (в системах на основе Unix это традиционно)

Вызов fork дублирует текущий процесс, и, если вам нужно, вы можете вызвать exec одного из потомков, чтобы сделать что-то другое. Похоже, вы просто хотите разветвляться и вызывать другой метод / функцию в вашем дочернем процессе.

Если вы хотите что-то более сложное, проверьте cpan для POE - это позволяет вам управлять всеми видами сложных сценариев.

Полезные ссылки:

Google "Perl Cookbook Forking Server" тоже - разрешено публиковать только одну ссылку, если я не захожу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...