我有一個perl腳本調用fork()幾次創建4個子進程。父進程然後使用waitpid()等待所有的孩子完成。Perl系統()命令失敗後叉
當我嘗試從子進程內調用system()(我使用它創建目錄)時,會發生此問題。即使像系統一樣簡單(「dir」)失敗(是的,我在Windows上)。
「失敗」,我的意思是說,其中一個子線程越過它沒有問題,但其他子進程,據我所知可以簡單地停止存在。
trace INFO, "Thread $thread_id still alive at 2.62";
system("dir");
trace INFO, "Thread $thread_id still alive at 2.65";
我得到諸如「線程3仍然活着在2.62」的消息,但只有1個子線程達到2.65。
在日誌的底部,我可以看到「命令以非零狀態127退出」,我認爲這可能與它有關。
我考慮過使用某種互斥鎖來確保一次只有一個進程通過系統調用,但我怎麼用fork()來做到這一點?另外,這個問題首先沒有任何意義,爲什麼幾個獨立的進程在同一時間做系統(「dir」)有困難?
你爲什麼使用'system()'創建目錄? – TLP
您使用的是哪個版本的perl?它是線程安全的嗎? –
您能否提供(最少量的)代碼來重現我們運行的問題? – ikegami