【问题标题】:How To Avoid SIGCHLD error In Bash Script That Uses GNU Parallel如何在使用 GNU Parallel 的 Bash 脚本中避免 SIGCHLD 错误
【发布时间】:2017-02-06 20:04:15
【问题描述】:

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

如果您对此有任何经验,我们非常感谢您的洞察力。

【问题讨论】:

  • 你用的是什么版本的并行?
  • GNU 并行 20160822(我相信是最新的)
  • 我认为这可能是一个并行的错误。我正在查看代码,作者在某一时刻删除了 sigchld 处理程序。也许在某些环境中与忽略信号具有相同的效果,但 perl 文档说您通过将处理程序设置为“IGNORE”来忽略信号。如果您删除处理程序会发生什么,它将保持沉默。如果可以,请尝试恢复到版本 20150222。
  • 有趣。稍后会尝试一下。如果可行,你就是我本周的英雄!
  • 嘿@ccarton,感谢您接受这个。它适用于旧版本。请提供答案,以便我选择正确并支持该问题。再次感谢:-)

标签: linux parallel-processing wget gnu-parallel sigchld


【解决方案1】:

(这只是一个评论,但评论太长了)。

到目前为止,还没有人能够可靠地重现该错误。看看你是否可以创建一个 MCVE https://stackoverflow.com/help/mcve。如果 IGNORE 建议解决了问题,那么解决方法应该是将 parallel 中的第 4361 行从:

    delete $SIG{CHLD};

进入:

    $SIG{CHLD} = 'IGNORE';

如果这有帮助,请告诉我们,如果可行,可以将其放入下一个版本。

【讨论】:

  • 嘿@OleTange,有作者帮助我,我感觉很特别。太感谢了。实际上,我昨天在这篇文章之前恢复到了 Parallel-20150222,并且已经运行了几次脚本,没有任何错误。我将继续测试它以确定。这是否足以比较“忽略”设置?否则,如果对您有帮助,我可以重新安装最新版本并尝试对其进行测试。虽然,我不太确定将$SIG{CHLD} = 'IGNORE'; 放在终端中、脚本顶部或包中某处的位置。再次感谢:-)
  • 并行更改脚本中的第 4361 行。
  • 请看看您是否可以制作 MCVE。这仍然会很有帮助。
  • 嘿@OleTange,如果有忽略选项,它可以与旧的 20150222 版本一起使用。如果没有,我将在本周末再次重新安装并尝试创建一个重复该问题的示例。好像我们在不同的时区,但我会尽力在这个周末进行测试,以便您获得反馈。与此同时,我真的很高兴旧版本能正常工作。
  • 我自己做了一些尝试来重新创建它,但没有运气。但是,我对代码的了解不够充分,无法制作一个肯定会触发此代码路径的测试。
【解决方案2】:

我认为这可能是一个并行错误。代码中有一点作者正在删除 sigchld 处理程序,大概是作为一种忽略信号的方式。 perl 文档对可能产生的影响保持沉默,向我暗示结果将取决于平台或实现且不可靠。忽略信号的正确方法是将处理程序设置为“INGORE”。我建议尝试版本 20150222,这是一个旧版本,它确实有这个有问题的代码。

【讨论】:

  • 如果可行,请尝试在 20160922(第 4361 行)中进行相同的更改,看看是否可以解决问题。
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多