2010-02-24 130 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的食譜分叉服務器」 太 - 只允許發佈一個鏈接,除非我登錄