我遇到过一种情况,即在特定情况下挂起或运行时间过长的进程应该被终止。另外,我不希望该进程占用 100% 的 CPU 时间。我在想我应该结合cpulimit
和timeout
。
我可以让每个命令单独工作,但不能一起工作:
cpulimit -l 20 -- /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx
timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx
我想做这样的事:
cpulimit -l 20 -- | timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx
答案1
您可以尝试将该timeout
命令作为参数运行cpulimit
:
cpulimit -l 20 -- timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx
请注意,这与您的上一个示例完全相同,但没有管道|
(管道将第一个进程的输出与第二个进程的输入链接在一起,这不是您想要的)。
答案2
我最终改用了nice
with。and组合timeout
的一个问题是,它产生了多个进程,但父进程却没有受到影响。cpulimit
timeout
soffice.bin
这解决了我的问题。
如果没有其他进程在运行,则还nice
可以让该进程使用 100% 的 CPU,而不是对资源进行硬性限制。
nice timeout -k 5 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx