node js как ограничить время выполнения команды в child_process?
Я хочу запустить команду через child_process. Как ограничить процессорное время выполнения команды?
Нужно чтобы как только процессорное время выполнения программы превысило какое-то значение x, то процесс бы просто убивался
Ответы (1 шт):
Этой проблеме есть два решения. Простое и более сложное.
Проще всего будет использовать утилиту
timeoutиз комплектаcoreutils. Дописываете её к запускаемой команде, и готово:timeout -k 60 30 my_commandС этими аргументами команду вежливо попросят на выход через 30 секунд и прибьют напрочь через 60 секунд.
Процессорное время в первом приближении можно получить поделив реальное время на число потоков, с которым выполняется ваша программа. Если ваша программа не имеет фиксированного числа потоков, то можно делить на число ядер процессора, которое подскажет команда
nproc.Более сложным решением будет вызывать системную функцию
getrusageв цикле с небольшим перерывом. Есть одноимённый пакет. В этом случае вам нужно будет самим делать всю работу, что за вас делает командаtimeout, получая сомнительную выгоду в точности использованных ресурсов в обмен на значительное усложнение самой программы и тестов.