2010-02-24 133 views
5

我有一个Perl程序,需要在后台同时运行大约六个程序,并等待它们全部完成后再继续。每个人的退出状态都可以被捕获也是非常重要的。如何在Perl中管理多个子进程?

在Perl中这样做有一个常见的习惯用法吗?我目前正在考虑使用线程。

回答

8

不要使用线程。线程吮吸。正确的方法是让fork多个进程和wait完成。如果使用waitwaitpid,则有问题的进程的退出状态将在$?中提供。

参见perldocs文档为forkwait,和waitpid,以及在this实施例SO线程。

如果您只需要管理一个不超过特定大小的子流程池,请查看优秀的Parallel::ForkManager

+0

借调'线程吸'评论。至少在Perl中。甚至不要打扰。 – fennec 2010-02-24 02:42:23

2

通常你会叉+ EXEC(基于UNIX的系统,这是传统的)

叉的通话将复制当前进程,如果你需要,你则可以调用exec在孩子一做有些不同。这听起来像你只是想在你的子进程中分叉和调用一个不同的方法/函数。

如果你想要更复杂的东西,请检查POE的cpan - 让你管理各种复杂的场景。

相关链接:

谷歌 “perl的食谱分叉服务器” 太 - 只允许发布一个链接,除非我登录