【发布时间】: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