我正在循環中運行script.sh。該腳本包含一個並行的wget命令。我收到以下錯誤:如何在使用GNU並行的Bash腳本中避免SIGCHLD錯誤
Signal SIGCHLD received, but no signal handler set.
循環是這樣的:
for i in {1..5}; do /script.sh; done
,這是導致錯誤的行看起來像這樣(忽略選項和設置):
cat file.txt | parallel -j15 wget
研究:
我不是一個EXP與GNU並行,但腳本似乎大部分時間工作正常,除非我得到上述錯誤。在查看SIGCHLD時,我瞭解到並行運行可以創建「殭屍進程」,有時我們需要「收穫」這些進程。另外,我發現你可以殺死進程,因爲有時他們可以佔用所有可用的連接。
試圖瞭解:
不過,我不知道是什麼原因造成這個問題擺在首位。這是我的平行嗎?我不是「收穫」過程嗎?我應該明確殺死進程嗎?是否因爲我在循環中運行並行腳本?
我的問題:
我怎樣才能解決這個SIGCHLD錯誤?
如果您有任何這方面的經驗,非常感謝您的洞察力。
您使用的是什麼版本的並行版本? – ccarton
GNU並行20160822(我相信最新的一個) – DomainsFeatured
我認爲這可能是一個並行的錯誤。我正在查看代碼,作者正在刪除sigchld處理程序。也許在一些與忽略信號具有相同效果的環境中,但是perl文檔說您通過將處理程序設置爲「IGNORE」來忽略信號。如果刪除處理程序,會發生什麼情況。如果可以,請嘗試恢復到版本20150222。 – ccarton