node js как ограничить время выполнения команды в child_process?

Я хочу запустить команду через child_process. Как ограничить процессорное время выполнения команды?

Нужно чтобы как только процессорное время выполнения программы превысило какое-то значение x, то процесс бы просто убивался


Ответы (1 шт):

Автор решения: sanmai

Этой проблеме есть два решения. Простое и более сложное.

  1. Проще всего будет использовать утилиту timeout из комплекта coreutils. Дописываете её к запускаемой команде, и готово:

    timeout -k 60 30 my_command
    

    С этими аргументами команду вежливо попросят на выход через 30 секунд и прибьют напрочь через 60 секунд.

    Процессорное время в первом приближении можно получить поделив реальное время на число потоков, с которым выполняется ваша программа. Если ваша программа не имеет фиксированного числа потоков, то можно делить на число ядер процессора, которое подскажет команда nproc.

  2. Более сложным решением будет вызывать системную функцию getrusage в цикле с небольшим перерывом. Есть одноимённый пакет. В этом случае вам нужно будет самим делать всю работу, что за вас делает команда timeout, получая сомнительную выгоду в точности использованных ресурсов в обмен на значительное усложнение самой программы и тестов.

→ Ссылка