我有一個Perl程序,需要在後臺同時運行大約六個程序,並等待它們全部完成後再繼續。每個人的退出狀態都可以被捕獲也是非常重要的。如何在Perl中管理多個子進程?
在Perl中這樣做有一個常見的習慣用法嗎?我目前正在考慮使用線程。
我有一個Perl程序,需要在後臺同時運行大約六個程序,並等待它們全部完成後再繼續。每個人的退出狀態都可以被捕獲也是非常重要的。如何在Perl中管理多個子進程?
在Perl中這樣做有一個常見的習慣用法嗎?我目前正在考慮使用線程。
不要使用線程。線程吮吸。正確的方法是讓fork
多個進程和wait
完成。如果使用wait
或waitpid
,則有問題的進程的退出狀態將在$?
中提供。
參見perldocs文檔爲fork,wait,和waitpid,以及在this實施例SO線程。
如果您只需要管理一個不超過特定大小的子流程池,請查看優秀的Parallel::ForkManager。
通常你會叉+ EXEC(基於UNIX的系統,這是傳統的)
叉的通話將複製當前進程,如果你需要,你則可以調用exec在孩子一做有些不同。這聽起來像你只是想在你的子進程中分叉和調用一個不同的方法/函數。
如果你想要更復雜的東西,請檢查POE的cpan - 讓你管理各種複雜的場景。
相關鏈接:
谷歌 「perl的食譜分叉服務器」 太 - 只允許發佈一個鏈接,除非我登錄
借調'線程吸'評論。至少在Perl中。甚至不要打擾。 – fennec 2010-02-24 02:42:23