【问题标题】:Shell Error xargs: terminated by signal 11Shell 错误 xargs:由信号 11 终止
【发布时间】: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


【解决方案1】:

错误来自jpeg-recompress 而不是来自xargs:jpeg-recompress 因 SIGSEGV 而死。分段错误通常只有在程序中存在错误时才会发生 - 通常是错误的指针。

我确信这是由 jpeg-recompress 中的一个错误引起的,该错误是由一个轻微损坏的 jpeg 文件触发的(或者恰好具有jpeg-recompress 不期望的格式)。

这也解释了为什么您只能在包含数十万张图片的大目录中看到此内容:其中一张有点损坏。

识别文件的一种方法是使用 GNU Parallel 的 --joblog 和 --halt:

find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' |
  parallel --joblog my.log --halt now,fail=1 jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{}

然后你应该在my.log的最后一行找到损坏文件的名称。

如果您认为可能有更多损坏的文件:

find /path/dir -type f -name '*.jpg' -not -path '*/imdb/*' |
  parallel --joblog my.log jpeg-recompress --quality high --min 60 --method smallfry --strip \{} \{}
grep -P '\t11\t' my.log

【讨论】:

  • 今天我开始做你的建议。需要一段时间才能得出结论。我可以多次使用单个--halt now,fail=1 记录损坏的文件。但是当记录多个损坏的文件并使用命令grep -P '\t11\t' my.log 时,它会给我一些未损坏的图像。你能说出'\t11\t'这行的实际作用吗?
  • '\t11\t' 搜索 TAB 11 TAB,即 SIGSEGV。如果其他列包含 11,它可能会产生一些误报。
  • 请保留损坏的文件并向 jpeg-recompress 的开发人员提交错误报告,以便他们可以正常退出而不是段错误。
  • 您的parallel --joblog 可以作为我的临时解决方案,并避免在此过程中出现段错误。我已经填写了一份错误报告作为您的建议。非常感谢您的帮助。
猜你喜欢
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2017-06-23
  • 2021-06-18
相关资源
最近更新 更多