linux – 如何在使用GNU Parallel的Bash脚本中避免SIGCHLD错误

我正在循环中运行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错误?

如果您对此有任何经验,我们非常感谢您的见解.

最佳答案 我认为这可能是一个并行的错误.代码中有一点是作者正在删除sigchld处理程序,可能是忽略信号的一种方式. perl文档没有提到可能产生的影响,这表明结果将依赖于平台或实现并且不可靠.忽略信号的正确方法是将处理程序设置为“INGORE”.我建议尝试版本20150222,这是一个旧版本,确实有这个有问题的代码.

点赞