Как определить, произошел ли сбой nodejs child_process из-за тайм-аута?
Если я сделаю child_process.exec('mycommand', { timeout: 5000 }, callback)
Я не знаю, была ли ошибка вызвана таймаутом или какой-либо другой причиной. Есть ли способ определить, был ли сбой вызван { timeout: 5000 }
опция передана child_process
?
1 ответ
Есть только один способ, который может быть не совсем надежным.
Так что будьте осторожны, когда используете его для своих нужд
Как это устроено:
- Когда срабатывает тайм-аут, родительский процесс отправляет значение по умолчанию
SIGTERM
сигнал, если вы не переопределите в параметрах {killSignal: 'SIGINT'} - После выхода из дочернего процесса обратный вызов родительского процесса
cb(err,stdout,stderr)
называется населениемerr.code
вnull
а такжеerr.signal
вSIGTERM
или что бы то ни было
Так что вы можете проверить err.signal
в обратном вызове. И опять же, это не совсем надежно, поскольку вы можете убить дочерний процесс из диспетчера задач или с помощью команды kill оболочки.