Процессы¶
Процесс запущенного Node.js приложения представлен глобальным объектом process
, который является экземпляром класса EventEmitter
и предоставляет полные данные о системе, параметрах запуска, переменных окружении и потребялемых процессом ресурсах.
Наиболее часто используемые свойства объекта process
:
arch
- архитектура процессора, на котором запущен Node.js процесс, возможные значения:arm
,ia32
,x64
;argv
- массив с параметрами запуска процесса, причем вслед за элементом массива, который содержит параметр, будет элемент со значением этого параметра;connected
- булевое значение, значение установленное вtrue
означает, что Node.js процесс был создан с IPC каналом (подробно здесь);env
- объект с пользовательским окружением;pid
- уникальный идентификатор процесса;platform
- платформа операционной системы, возможные значения:freebsd
,linux
,win32
и т. д.;version
- текущая версия Node.js.
1 2 |
|
Наиболее часто используемые методы объекта process
:
cpuUsage()
- возвращает объект с пользовательским и системным временем использования процесса в микросекундах, на основе которого можно рассчитать загрузку процессора в процентах, необязательным параметром может принимать свое предыдущее значение;hrtime()
- возвращает высоко точное время в виде массива с двумя элементами: секунды и наносекунды;cwd()
- возвращает рабочую директорию Node.js процесса;disconnect()
- отключает IPC канал от главного процесса и завершает дочерний;exit()
- завершает процесс при первой же возможности с заданным кодом (по умолчанию код завершения равен0
);memoryUsage()
- возвращает объект с данными об использовании Node.js процессом оперативной памяти, объект содержит свойстваrss
(отведенный под процесс объем памяти),heapTotal
(объем памяти, отведенный под V8),heapUsed
(объем памяти, используемый V8 в данный момент) иexternal
(использование памяти объектами C++), все значения в байтах;on()
- метод обработки событий;send()
- используется для обмена сообщениями между основным и дочерними процессами (подробно здесь);uptime()
- возвращает количество миллисекунд, прошедшее с момента запуска процесса.
Пример расчета использования процессом процессора в процентах.
cpu-usage.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Наиболее часто используемые события объекта process
:
beforeExit
- инициируется, когда полностью заканчивается цикл событий;disconnect
- генерируется в дочернем процессе при закрытии канала IPC;exit
- инициируется при завершении процесса вызовом методаprocess.exit()
или по завершению цикла событий;message
- может возникнуть только в главном процессе, когда в одном из дочерних процессов вызывается методmessage()
;uncaughtException
- генерируется в случае возникновения необработанного исключения, но процесс при этом не завершается.
Событие beforeExit
не возникнет, если процесс завершается в результате ошибки или вызовом метода process.exit()
.
Пример обработки uncaughtException
.
1 2 3 4 5 6 |
|
Коды завершения Node.js процесса:
1
- исключение, которое не обработано ни JavaScript, ни обработчиком событияuncaughtException
;3
,4
,10
- означают ошибки исходного кода JavaScript, обычно встречаются только при разработке самой платформы Node.js;5
- критическая ошибка V8;6
- необработанное исключение не попало в обработчик критических исключений;7
- возникновение ошибки в обработчике критических исключений;9
- используется, если были неправильно заданы аргументы;12
- возникает в режиме отладки при некорректном указании порта.
1 2 3 4 5 |
|
В случае завершения цикла событий процесс завершается с кодом 0
.
С полным списком свойств, методов и событий Node.js процесса можно ознакомиться на официальном сайте.
В случаях, когда часто выполняются блокирующие основной процесс операции, лучше доверить их выполнение дочерним процессам.