У меня есть ситуация, когда процесс, который зависает при определенных обстоятельствах или работает слишком долго, должен быть убит. Также я не хочу, чтобы процесс занимал 100% процессорного времени. Я думаю, что мне следует совместить 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
Вы можете попробовать запустить timeout
команда как аргумент cpulimit
:
cpulimit -l 20 -- timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx
Обратите внимание, что это точно так же, как ваш последний пример, но без трубы |
(конвейер связывает вывод первого процесса с вводом второго, что вам здесь не нужно).
В итоге я использовал nice
с участием timeout
вместо. Одна проблема с cpulimit
и timeout
комбо было то soffice.bin
породил несколько процессов, и родительский процесс каким-то образом не пострадал.
Это решило мою проблему.
Также nice
вместо жесткого ограничения ресурсов дать процессу возможность использовать 100% ЦП, если другие процессы не запущены.
nice timeout -k 5 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx