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

标签 linux parallel-processing wget gnu-parallel 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,这是一个旧版本,它确实有这个有问题的代码。

关于linux - 如何在使用 GNU Parallel 的 Bash 脚本中避免 SIGCHLD 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754323/

相关文章:

python - 在python脚本中获取路径

r - 当应用于 df[i,] 中的数据帧时, foreach %dopar% 实际在做什么

r - 并行missForest

terminology - SPMD 和 SIMD 有什么区别?

php - 如何使用 wget 或curl 以类似于浏览器的方式从 CLI 执行 PHP 脚本

bash - WGET 保存时使用错误的文件和扩展名,可能是由于 BASH 造成的

linux - 打印文件夹中所有文档的特定行

ruby-on-rails - 将 Rails 应用程序部署到共享主机(错误)

text - 如何 `wget` 文本文件中的 URL 列表?

regex - pnp4nagios 性能报告-正则表达式模式/过滤器