script.sh をループで実行しています。スクリプトには、並列 wget コマンドが含まれています。次のエラーが表示されます。
Signal SIGCHLD received, but no signal handler set.
ループは次のようになります。
for i in {1..5}; do /script.sh; done
エラーの原因となっている行は次のようになります (オプションと設定を省略しています)。
cat file.txt | parallel -j15 wget
リサーチ:
私は GNU Parallel の専門家ではありませんが、上記のエラーが発生した場合を除いて、ほとんどの場合、スクリプトは問題なく動作しているようです。SIGCHLD を調べているうちに、並列実行を実行すると「ゾンビ プロセス」が作成される可能性があり、場合によってはこれらのプロセスを「刈り取る」必要があることがわかりました。また、プロセスが利用可能なすべての接続を占有する場合があるため、プロセスを強制終了できることもわかりました。
理解しようとしている:
ただし、そもそも何が問題を引き起こしているのかわかりません。それは私のパラレルですか?私はプロセスを「刈り取り」していませんか?プロセスを明示的に強制終了する必要がありますか? 並列スクリプトをループで実行しているためですか?
私の質問:
SIGCHLD エラーを解決するにはどうすればよいですか?
これについての経験があれば、あなたの洞察は大歓迎です。