Shell 错误 xargs:由信号 11 终止
Shell Error xargs: terminated by signal 11
我在图像压缩工具 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
由于 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
我在图像压缩工具 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
由于 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