【发布时间】:2018-07-25 04:26:37
【问题描述】:
我正在使用图像压缩工具 jpeg-recompress 上的带有目录排除功能的 FIND 命令,并使用 xargs 来加速该过程。
命令行是:
find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' | xargs -P 50 -I {} jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{} \;
几分钟后发生错误:
xargs: jpeg-recompress: terminated by signal 11
只有在处理包含数十万张图像的大型目录时才会发生这种情况。我已经搜索了与分段错误相关的信号 11,但我不太了解它们。我唯一知道的是,大概我正在尝试访问一些我不应该访问的内存。
请帮忙,我不是很懂代码,也不明白我做错了什么。
感谢您的帮助。
【问题讨论】:
-
这只是意味着
jpeg-recompress之一在某些条件下运行分段错误。这与 xargs 没有直接关系,除了 - 也许 - 如果许多重新压缩过程并行运行,jpeg-recompress 中的这个错误更有可能出现。您可以尝试使用-P 1运行它几次(尽管这需要您的耐心),如果错误消失了,您至少知道该错误是由并行化引起的。 -
@user1934428 试试你的建议,将并行化降低到 -P 25。如果错误仍然存在,明天再报告。
-
@user1934428 仍然给我同样的错误。我再次将其降低到 -P 10。
-
为什么不像我建议的那样
-P 1?如果这可行,您仍然可以使用并行度向上。如果它不起作用,我们知道问题不在于并行性,我们可以在其他地方搜索。 -
是的,今天我将它降低到-P 1,仍然相同的错误xargs:jpeg-recompress:由信号11终止find:'标准输出':Broken pipe find:写入错误
标签: linux shell segmentation-fault xargs