Процессы¶
Процесс запущенного 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 процесса можно ознакомиться на официальном сайте.
В случаях, когда часто выполняются блокирующие основной процесс операции, лучше доверить их выполнение дочерним процессам.