我正在使用 latexmk 编译我的文档,并希望限制每个编译周期的时间。为了做到这一点,我timeout
以以下方式使用 util:
latexmk -f -pdf -bibtex \
-pdflatex="timeout 5s xelatex -interaction=nonstopmode -synctex=-1 %O %S" \
main.tex
当编译循环耗时超过 5 秒时,就会发送 TERM 信号并终止循环。但 latexmk 报告的返回代码是 31744:
收集的错误摘要(可能重复其他消息): pdflatex:“pdflatex”命令返回代码 31744
timeout
util 说应该是 124:If the command times out ... then exit with status 124
我查看了 latexmk 源代码并且它所谈论的退出代码是从提供的命令运行中捕获的(在我的情况下是timeout 5s xelatex...
)
我认为这是因为 pdflatex 捕获了 SIGTERM 并尝试在超时命令中使用 SIGKILL timeout --signal=SIGKILL 5s...
,但退出代码为 35072。
所以,我的问题是这些奇怪的退出代码是什么?它们来自哪里,它们意味着什么?我查看了 pdftex 和 xetex 源,但没有发现任何提及它们的内容。我能确定 31744 退出代码意味着 SIGTERM 而不是其他吗?
关于我正在使用的软件的简短说明:
- latexmk 4.39
- XeTeX,版本 3.1415926-2.5-0.9999.3(TeX Live 2013/Debian)
- GNU coreutils 8.23 超时
感谢您的任何帮助。
答案1
报告的代码latexmk
是 Perlsystem
函数报告的代码。如该函数的文档所述,http://perldoc.perl.org/functions/system.html,这些代码是执行程序的退出代码左移 8 位。(低位有一些额外信息。)因此,要获取执行程序的实际退出代码,只需将报告的退出代码除以 256 latexmk
。