我有一个Perl程序需要在后台同时运行大约六个程序并等待它们全部完成然后继续。同样非常重要的是,可以捕获每个的退出状态。
在Perl中执行此操作是否有一个共同的习惯用法?我正在考虑使用线程。
答案 0 :(得分:8)
不要使用线程。线程很糟糕。正确的方法是fork
多个进程和wait
完成它们。如果您使用wait
或waitpid
,相关流程的退出状态将在$?
中提供。
请参阅fork,wait和waitpid的perldoc,以及this SO帖子中的示例。
如果您只需要管理一个不超过一定规模的子流程池,请查看优秀的Parallel::ForkManager。
答案 1 :(得分:2)
通常你会fork + exec(在基于unix的系统上,这是传统的)
fork调用将复制当前进程,如果需要,可以在其中一个子进程中调用exec来执行不同的操作。听起来你只想在子进程中分叉并调用不同的方法/函数。
如果你想要更复杂的东西,请查看cpan for POE - 这可以让你管理各种复杂的场景。
有用的链接:
谷歌“perl cookbook forking server”也是 - 只允许发布一个链接,除非我登录。