Процесс¶
Объект process
предоставляет информацию о текущем процессе Node.js и контроль над ним.
1 |
|
1 |
|
Обработка событий¶
Объект process
является экземпляром EventEmitter
.
Событие: 'beforeExit'
¶
Событие 'beforeExit'
генерируется, когда Node.js опустошает свой цикл событий и не имеет дополнительной работы для планирования. Обычно процесс Node.js завершается, когда нет запланированной работы, но слушатель, зарегистрированный на событии 'beforeExit'
, может выполнять асинхронные вызовы и тем самым заставлять процесс Node.js продолжать работу.
Функция обратного вызова слушателя вызывается со значением process.exitCode
, переданным в качестве единственного аргумента.
Событие 'beforeExit'
не выдается для условий, вызывающих явное завершение, таких как вызов process.exit()
или не пойманные исключения.
Событие 'beforeExit'
не должно не использоваться в качестве альтернативы событию 'exit'
, если только не предполагается запланировать дополнительную работу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Событие: disconnect
¶
Если процесс Node.js порожден с IPC-каналом (см. документацию Child Process и Cluster), событие 'disconnect'
будет испущено, когда IPC-канал будет закрыт.
Событие: exit
¶
code
<integer>
Событие 'exit'
генерируется, когда процесс Node.js собирается завершиться в результате либо:
- Явного вызова метода
process.exit()
; - Цикл событий Node.js больше не должен выполнять никакой дополнительной работы.
На данный момент нет способа предотвратить выход из цикла событий, и как только все слушатели 'exit'
завершат работу, процесс Node.js завершится.
Функция обратного вызова слушателя вызывается с кодом выхода, указанным либо свойством process.exitCode
, либо аргументом exitCode
, переданным методу process.exit()
.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Функции слушателя должны выполнять только синхронные операции. Процесс Node.js завершится сразу после вызова слушателя события 'exit'
, в результате чего любая дополнительная работа, все еще находящаяся в очереди в цикле событий, будет прекращена. В следующем примере, например, таймаут никогда не произойдет:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
Событие: message
¶
message
{ Object | boolean | number | string | null } разобранный объект JSON или сериализуемое примитивное значение.sendHandle
{net.Server|net.Socket} объектnet.Server
илиnet.Socket
, или undefined.
Если процесс Node.js порожден с IPC-каналом (см. документацию Child Process и Cluster), событие 'message'
испускается всякий раз, когда сообщение, отправленное родительским процессом с помощью childprocess.send()
, получено дочерним процессом.
Сообщение проходит через сериализацию и разбор. Полученное сообщение может отличаться от первоначально отправленного.
Если при порождении процесса опция сериализации
была установлена на продвинутую
, аргумент сообщение
может содержать данные, которые JSON не может представить. Более подробную информацию смотрите в Advanced serialization for child_process
.
Событие: multipleResolves
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
type
<string>
Тип разрешения. Один из'resolve'
или'reject'
.promise
<Promise>
Обещание, которое было разрешено или отвергнуто более одного раза.value
<any>
Значение, с которым обещание было разрешено или отвергнуто после первоначального разрешения.
Событие 'multipleResolves'
испускается всякий раз, когда обещание
было либо:
- Разрешено более одного раза.
- Отклонено более одного раза.
- Отклонено после разрешения.
- Решено после отклонения.
Это полезно для отслеживания потенциальных ошибок в приложении при использовании конструктора Promise
, так как множественные разрешения молча проглатываются. Однако возникновение этого события не обязательно указывает на ошибку. Например, Promise.race()
может вызвать событие 'multipleResolves'
.
Из-за ненадежности этого события в случаях, подобных приведенному выше примеру Promise.race()
, оно было устаревшим.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Событие: rejectionHandled
¶
promise
<Promise>
Обещание, обработанное с опозданием.
Событие 'rejectionHandled'
испускается всякий раз, когда Promise
было отклонено и к нему был присоединен обработчик ошибок (например, с помощью promise.catch()
) позже, чем один оборот цикла событий Node.js.
Объект Promise
ранее был бы выпущен в событии 'unhandledRejection'
, но в процессе обработки получил обработчик отказа.
Для цепочки Promise
не существует понятия верхнего уровня, на котором всегда можно обработать отказ. Будучи по своей природе асинхронным, отказ Promise
может быть обработан в будущий момент времени, возможно, гораздо позже, чем время цикла событий, необходимое для появления события 'unhandledRejection'
.
По-другому это можно выразить так: в отличие от синхронного кода, где существует постоянно растущий список необработанных исключений, в Promises список необработанных отказов может расти и уменьшаться.
В синхронном коде событие uncaughtException
испускается, когда список необработанных исключений растет.
В асинхронном коде событие 'unhandledRejection'
генерируется, когда список необработанных отказов растет, а событие 'rejectionHandled'
генерируется, когда список необработанных отказов уменьшается.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
В этом примере карта unhandledRejections
Map
будет расти и уменьшаться с течением времени, отражая отказы, которые начались без обработки, а затем стали обработанными. Можно записывать такие ошибки в журнал ошибок, либо периодически (что, вероятно, лучше для долго работающего приложения), либо по завершении процесса (что, вероятно, наиболее удобно для скриптов).
Событие: 'uncaughtException'
¶
err
<Error>
Непойманное исключение.origin
<string>
Указывает, происходит ли исключение из необработанного отказа или из синхронной ошибки. Может быть либо'uncaughtException'
, либо'unhandledRejection'
. Последнее используется, когда исключение происходит в асинхронном контексте на основеPromise
(или еслиPromise
отклоняется) и флаг--unhandled-rejections
установлен наstrict
илиthrow
(что является значением по умолчанию) и отклонение не обрабатывается, или когда отклонение происходит во время фазы статической загрузки модуля ES в командной строке.
Событие 'uncaughtException'
генерируется, когда не пойманное исключение JavaScript прорывается обратно в цикл событий. По умолчанию Node.js обрабатывает такие исключения, печатая трассировку стека в stderr
и завершая работу с кодом 1, переопределяя любой ранее установленный process.exitCode
. Добавление обработчика для события 'uncaughtException'
отменяет это поведение по умолчанию. В качестве альтернативы измените process.exitCode
в обработчике события 'uncaughtException'
, что приведет к завершению процесса с указанным кодом выхода. В противном случае, при наличии такого обработчика процесс завершится с кодом 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Можно отслеживать события 'uncaughtException'
без переопределения поведения по умолчанию для завершения процесса, установив слушателя 'uncaughtExceptionMonitor'
.
Предупреждение: Правильное использование 'uncaughtException'
¶
'uncaughtException'
- это грубый механизм обработки исключений, предназначенный для использования только в крайнем случае. Это событие не должно использоваться как эквивалент On Error Resume Next
. Не обработанные исключения по своей сути означают, что приложение находится в неопределенном состоянии. Попытка возобновить работу приложения без надлежащего восстановления после исключения может вызвать дополнительные непредвиденные и непредсказуемые проблемы.
Исключения, брошенные из обработчика событий, не будут перехвачены. Вместо этого процесс завершится с ненулевым кодом завершения и будет напечатан след стека. Это делается для того, чтобы избежать бесконечной рекурсии.
Попытка возобновить нормальную работу после не пойманного исключения может быть похожа на выдергивание шнура питания при обновлении компьютера. В девяти случаях из десяти ничего не происходит. Но на десятый раз система становится поврежденной.
Правильное использование uncaughtException
заключается в синхронной очистке выделенных ресурсов (например, дескрипторов файлов, дескрипторов и т. д.) перед завершением процесса. Возобновлять нормальную работу после uncaughtException
небезопасно.
Для более надежного перезапуска сбойного приложения, независимо от того, выдается ли 'uncaughtException'
или нет, следует использовать внешний монитор в отдельном процессе для обнаружения сбоев приложения и восстановления или перезапуска по мере необходимости.
Событие: 'uncaughtExceptionMonitor'
¶
err
<Error>
Непойманное исключение.origin
<string>
Указывает, происходит ли исключение из необработанного отказа или из синхронных ошибок. Может быть либо'uncaughtException'
, либо'unhandledRejection'
. Последнее используется, когда исключение происходит в асинхронном контексте на основеPromise
(или еслиPromise
отклоняется) и флаг--unhandled-rejections
установлен наstrict
илиthrow
(что является значением по умолчанию) и отклонение не обрабатывается, или когда отклонение происходит во время фазы статической загрузки модуля ES в точке входа командной строки.
Событие uncaughtExceptionMonitor
испускается до того, как испускается событие uncaughtException
или вызывается хук, установленный через process.setUncaughtExceptionCaptureCallback()
.
Установка слушателя 'uncaughtExceptionMonitor'
не меняет поведения после возникновения события 'uncaughtException'
. Процесс все равно завершится, если не установлен слушатель 'uncaughtException'
.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Событие: 'unhandledRejection'
¶
reason
{Error|any} Объект, с которым обещание было отклонено (обычно это объектError
).promise
<Promise>
Отклоненное обещание.
Событие 'unhandledRejection'
возникает всякий раз, когда отвергается Promise
и в течение одного оборота цикла событий к обещанию не присоединяется обработчик ошибки. При программировании с Promises исключения инкапсулируются как "отклоненные обещания". Отклонения могут быть пойманы и обработаны с помощью promise.catch()
и распространяются через цепочку Promise
. Событие 'unhandledRejection'
полезно для обнаружения и отслеживания отклоненных обещаний, чьи отклонения еще не были обработаны.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Следующие действия также вызовут событие unhandledRejection
:
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
В этом примере можно отследить отказ как ошибку разработчика, как это обычно происходит с другими событиями необработанного отказа
. Для решения подобных проблем к resource.loaded
может быть присоединен нерабочий обработчик .catch(() => { })
, который предотвратит возникновение события unhandledRejection
.
Событие: warning
¶
warning
<Error>
Ключевыми свойствами предупреждения являются:
Событие 'warning'
выдается всякий раз, когда Node.js выдает предупреждение процесса.
Предупреждение процесса похоже на ошибку в том смысле, что оно описывает исключительные условия, на которые обращается внимание пользователя. Однако предупреждения не являются частью обычного потока обработки ошибок Node.js и JavaScript. Node.js может выдавать предупреждения всякий раз, когда обнаруживает плохую практику кодирования, которая может привести к неоптимальной производительности приложения, ошибкам или уязвимостям безопасности.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
По умолчанию Node.js будет печатать предупреждения процесса в stderr
. Опция командной строки --no-warnings
может быть использована для подавления вывода на консоль по умолчанию, но событие 'warning'
все равно будет выдаваться объектом process
.
Следующий пример иллюстрирует предупреждение, которое выводится в stderr
, когда к событию было добавлено слишком много слушателей:
1 2 3 4 5 6 |
|
В противоположность этому, следующий пример отключает вывод предупреждения по умолчанию и добавляет пользовательский обработчик к событию предупреждение
:
1 2 3 4 5 6 |
|
Опция командной строки --trace-warnings
может быть использована для того, чтобы вывод предупреждений в консоли по умолчанию включал полную трассировку стека предупреждения.
Запуск Node.js с использованием флага командной строки --throw-deprecation
приведет к тому, что пользовательские предупреждения о депривации будут отбрасываться как исключения.
Использование флага командной строки --trace-deprecation
приведет к тому, что пользовательское предупреждение будет выведено в stderr
вместе с трассировкой стека.
Использование флага командной строки --no-deprecation
подавит все сообщения о пользовательском обесценивании.
Флаги командной строки *-deprecation
влияют только на предупреждения, использующие имя 'DeprecationWarning'
.
Событие: worker
¶
worker
{Worker} Созданный {Worker}.
Событие 'worker'
испускается после создания нового потока {Worker}.
Выдача пользовательских предупреждений¶
См. метод process.emitWarning()
для выдачи пользовательских или специфических для приложения предупреждений.
Имена предупреждений Node.js¶
Не существует строгих правил для типов предупреждений (определяемых свойством name
), выдаваемых Node.js. Новые типы предупреждений могут быть добавлены в любое время. Несколько наиболее распространенных типов предупреждений включают:
'DeprecationWarning'
- Указывает на использование устаревшего API Node.js или функции. Такие предупреждения должны включать свойство'code'
, идентифицирующее deprecation code.'ExperimentalWarning'
- Указывает на использование экспериментального API или функции Node.js. Такие возможности следует использовать с осторожностью, так как они могут измениться в любое время и не подчиняются тем же строгим правилам семантической версификации и долгосрочной поддержки, что и поддерживаемые возможности.MaxListenersExceededWarning
- Указывает, что слишком много слушателей для данного события было зарегистрировано либо наEventEmitter
, либо наEventTarget
. Это часто является признаком утечки памяти.'TimeoutOverflowWarning'
- Указывает на то, что функцииsetTimeout()
илиsetInterval()
было предоставлено числовое значение, которое не укладывается в 32-битное знаковое целое число.'UnsupportedWarning'
- Указывает на использование неподдерживаемой опции или функции, которая будет проигнорирована, а не расценена как ошибка. Примером может служить использование сообщения о статусе ответа HTTP при использовании API совместимости HTTP/2.
Сигнальные события¶
Сигнальные события будут возникать, когда процесс Node.js получает сигнал. Пожалуйста, обратитесь к signal(7) для получения списка стандартных имен сигналов POSIX, таких как 'SIGINT'
, 'SIGHUP'
и т.д.
Сигналы недоступны для потоков Worker
.
Обработчик сигнала будет получать имя сигнала ('SIGINT'
, 'SIGTERM'
и т.д.) в качестве первого аргумента.
Имя каждого события будет общим именем сигнала в верхнем регистре (например, 'SIGINT'
для сигналов SIGINT
).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
'SIGUSR1'
зарезервирован Node.js для запуска отладчика. Можно установить слушателя, но это может помешать работе отладчика.'SIGTERM'
и'SIGINT'
имеют обработчики по умолчанию на платформах, отличных от Windows, которые сбрасывают режим терминала перед выходом с кодом128 + номер сигнала
. Если у одного из этих сигналов установлен слушатель, его поведение по умолчанию будет удалено (Node.js больше не будет выходить).- Сигнал
'SIGPIPE'
игнорируется по умолчанию. У него может быть установлен слушатель. 'SIGHUP'
генерируется в Windows при закрытии окна консоли, а также на других платформах при различных аналогичных условиях. См. signal(7). Может быть установлен слушатель, однако Node.js будет безусловно завершен Windows примерно через 10 секунд. On non-Windows platforms, the default behavior ofSIGHUP
is to terminate Node.js, but once a listener has been installed its default behavior will be removed.'SIGTERM'
is not supported on Windows, it can be listened on.'SIGINT'
from the terminal is supported on all platforms, and can usually be generated with Ctrl+C (though this may be configurable). It is not generated when terminal raw mode is enabled and Ctrl+C is used.'SIGBREAK'
is delivered on Windows when Ctrl+Break is pressed. On non-Windows platforms, it can be listened on, but there is no way to send or generate it.'SIGWINCH'
is delivered when the console has been resized. On Windows, this will only happen on write to the console when the cursor is being moved, or when a readable tty is used in raw mode
process.abort()
¶
Метод process.abort()
заставляет процесс Node.js немедленно завершить работу и сгенерировать файл ядра.
Эта функция недоступна в потоках Worker
.
process.allowedNodeEnvironmentFlags
¶
- {Set}
Свойство process.allowedNodeEnvironmentFlags
- это специальный, доступный только для чтения Set
флагов, допустимых в переменной окружения NODE_OPTIONS
.
process.allowedNodeEnvironmentFlags
расширяет Set
, но переопределяет Set.prototype.has
, чтобы распознать несколько различных возможных представлений флагов. process.allowedNodeEnvironmentFlags.has()
будет возвращать true
в следующих случаях:
- Флаги могут опускать ведущие одинарные (
-
) или двойные (--
) тире; например,inspect-brk
для--inspect-brk
, илиr
для-r
. - Флаги, передаваемые в V8 (как указано в
--v8-options
), могут заменять одно или несколько не ведущих тире на подчеркивание, или наоборот; например,--perf_basic_prof
,--perf-basic-prof
,--perf_basic-prof
и т.д. - Флаги могут содержать один или несколько символов равенства (
=
); все символы после и включая первый символ равенства будут игнорироваться; например,--stack-trace-limit=100
. - Флаги должны быть допустимыми в пределах
NODE_OPTIONS
.
При итерации по process.allowedNodeEnvironmentFlags
, флаги будут появляться только один раз; каждый из них будет начинаться с одного или нескольких тире. Флаги, передаваемые в V8, будут содержать символы подчеркивания вместо не ведущих тире:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Методы add()
, clear()
, и delete()
из process.allowedNodeEnvironmentFlags
ничего не делают, и будут молча провалены.
Если Node.js был скомпилирован без поддержки NODE_OPTIONS
(показано в process.config
), process.allowedNodeEnvironmentFlags
будет содержать то, что было разрешено.
process.arch
¶
Архитектура процессора операционной системы, для которой был скомпилирован двоичный файл Node.js. Возможные значения: 'arm'
, 'arm64'
, 'ia32'
, 'mips'
, 'mipsel'
, 'ppc'
, 'ppc64'
, 's390'
, 's390x'
, и 'x64'
.
1 2 3 |
|
1 2 3 |
|
process.argv
¶
Свойство process.argv
возвращает массив, содержащий аргументы командной строки, переданные при запуске процесса Node.js. Первым элементом будет process.execPath
. Смотрите process.argv0
, если необходим доступ к исходному значению argv[0]
. Вторым элементом будет путь к выполняемому файлу JavaScript. Остальные элементы будут любыми дополнительными аргументами командной строки.
Например, если взять следующий сценарий для process-args.js
:
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
Запуск процесса Node.js как:
1 |
|
Сгенерирует вывод:
1 2 3 4 5 |
|
process.argv0
¶
Свойство process.argv0
хранит только для чтения копию исходного значения argv[0]
, переданного при запуске Node.js.
1 2 3 4 5 |
|
process.channel
¶
Если процесс Node.js был порожден с IPC-каналом (см. документацию Child Process), свойство process.channel
является ссылкой на IPC-канал. Если IPC-канала не существует, это свойство не определено
.
process.channel.ref()
¶
Этот метод заставляет IPC-канал сохранить цикл событий запущенного процесса, если .unref()
был вызван ранее.
Обычно это управляется через количество слушателей 'disconnect'
и 'message'
на объекте process
. Однако этот метод можно использовать для явного запроса определенного поведения.
process.channel.unref()
¶
Этот метод заставляет IPC-канал не поддерживать цикл событий процесса и позволяет ему завершиться, даже если канал открыт.
Обычно это управляется через количество слушателей 'disconnect'
и 'message'
на объекте process
. Однако этот метод может быть использован для явного запроса определенного поведения.
process.chdir(directory)
¶
directory
<string>
Метод process.chdir()
изменяет текущий рабочий каталог процесса Node.js или выбрасывает исключение, если это не удается (например, если указанный каталог
не существует).
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Эта возможность недоступна в потоках Worker
.
process.config
¶
Свойство process.config
возвращает замороженный Object
, содержащий JavaScript-представление опций configure, используемых для компиляции текущего исполняемого файла Node.js. Это то же самое, что и файл config.gypi
, который был создан при выполнении скрипта ./configure
.
Пример возможного вывода выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
process.connected
¶
Если процесс Node.js порожден с IPC-каналом (см. документацию Child Process и Cluster), свойство process.connected
будет возвращать true
до тех пор, пока IPC-канал подключен, и вернет false
после вызова process.disconnect()
.
Как только process.connected
становится false
, отправка сообщений по IPC-каналу с помощью process.send()
становится невозможной.
process.constrainedMemory()
¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
- {number|undefined}
Получает объем памяти, доступный процессу (в байтах), основанный на ограничениях, наложенных ОС. Если такого ограничения нет, или оно неизвестно, возвращается undefined
.
Дополнительную информацию см. в uv_get_constrained_memory
.
process.cpuUsage([previousValue])
¶
previousValue
<Object>
Предыдущее возвращаемое значение после вызоваprocess.cpuUsage()
.- Возвращает:
<Object>
Метод process.cpuUsage()
возвращает пользовательское и системное использование процессорного времени текущего процесса в объекте со свойствами user
и ystem
, значения которых являются микросекундами (миллионными долями секунды). Эти значения измеряют время, проведенное в пользовательском и системном коде соответственно, и могут оказаться больше, чем реально прошедшее время, если несколько ядер процессора выполняют работу для данного процесса.
Результат предыдущего вызова process.cpuUsage()
может быть передан в качестве аргумента функции, чтобы получить разницу в показаниях.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
process.cwd()
¶
- Возвращает:
<string>
Метод process.cwd()
возвращает текущий рабочий каталог процесса Node.js.
1 2 3 |
|
1 2 3 |
|
process.debugPort
¶
Порт, используемый отладчиком Node.js, когда он включен.
1 2 3 |
|
1 2 3 |
|
process.disconnect()
¶
Если процесс Node.js порожден с IPC-каналом (см. документацию Child Process и Cluster), метод process.disconnect()
закроет IPC-канал для родительского процесса, позволяя дочернему процессу изящно завершить работу, когда не останется других соединений, поддерживающих его жизнь.
Эффект от вызова process.disconnect()
такой же, как от вызова ChildProcess.disconnect()
из родительского процесса.
Если процесс Node.js не был порожден с IPC-каналом, process.disconnect()
будет не определен
.
process.dlopen(module, filename[, flags])
¶
модуль
{объект}filename
<string>
флаги
{os.constants.dlopen} По умолчанию:os.constants.dlopen.RTLD_LAZY
.
Метод process.dlopen()
позволяет динамически загружать общие объекты. Он в основном используется require()
для загрузки C++ аддонов, и не должен использоваться напрямую, за исключением особых случаев. Другими словами, require()
следует предпочесть process.dlopen()
, если нет особых причин, таких как пользовательские флаги dlopen или загрузка из модулей ES.
Аргумент flags
- это целое число, позволяющее указать поведение dlopen. Подробности см. в документации os.constants.dlopen
.
Важным требованием при вызове process.dlopen()
является передача экземпляра модуля
. Функции, экспортируемые C++ Addon, доступны через module.exports
.
В примере ниже показано, как загрузить C++ аддон с именем local.node
, который экспортирует функцию foo
. Все символы загружаются до возврата вызова, передавая константу RTLD_NOW
. В этом примере предполагается, что константа доступна.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
process.emitWarning(warning[, options])
¶
warning
<string>
|<Error>
Предупреждение, которое нужно выдать.options
<Object>
type
<string>
Когдаwarning
являетсяString
,type
является именем, которое следует использовать для типа выдаваемого предупреждения. По умолчанию:'Warning'
.code
<string>
Уникальный идентификатор для выдаваемого экземпляра предупреждения.ctor
<Function>
Когдаwarning
являетсяString
,ctor
является необязательной функцией, используемой для ограничения генерируемой трассировки стека. По умолчанию:process.emitWarning
.detail
<string>
Дополнительный текст для включения в ошибку.
Метод process.emitWarning()
может быть использован для выдачи пользовательских или специфических для приложения предупреждений процесса. Их можно прослушать, добавив обработчик к событию 'warning'
.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
В этом примере объект Error
генерируется внутри process.emitWarning()
и передается обработчику 'warning'
.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Если warning
передается как объект Error
, аргумент options
игнорируется.
process.emitWarning(warning[, type[, code]][, ctor])
.¶
warning
<string>
|<Error>
Предупреждение, которое нужно выдать.type
<string>
Когдаwarning
являетсяString
,type
является именем, которое следует использовать для типа выдаваемого предупреждения. По умолчанию:'Warning'
.code
<string>
Уникальный идентификатор для выдаваемого экземпляра предупреждения.ctor
<Function>
Когдаwarning
являетсяString
,ctor
является необязательной функцией, используемой для ограничения генерируемой трассировки стека. По умолчанию:process.emitWarning
.
Метод process.emitWarning()
может быть использован для выдачи пользовательских или специфических для приложения предупреждений процесса. Их можно прослушать, добавив обработчик к событию 'warning'
.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
1 2 3 4 5 |
|
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
В каждом из предыдущих примеров объект Error
генерируется внутри process.emitWarning()
и передается обработчику 'warning'
.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
Если warning
передан как объект Error
, он будет передан обработчику события 'warning'
без изменений (а необязательные аргументы type
, code
и ctor
будут проигнорированы):
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Если warning
не является строкой или объектом Error
, возникает TypeError
.
Хотя предупреждения процесса используют объекты Error
, механизм предупреждений процесса не является ** заменой обычных механизмов обработки ошибок.
Следующая дополнительная обработка выполняется, если тип
предупреждения - 'DeprecationWarning'
:
- Если используется флаг командной строки
--throw-deprecation
, предупреждение об износе выбрасывается как исключение, а не как событие. - Если используется флаг командной строки
--no-deprecation
, предупреждение о депривации подавляется. - Если используется флаг командной строки
--trace-deprecation
, предупреждение об ошибке выводится вstderr
вместе с полной трассировкой стека.
Избегание дублирования предупреждений¶
В качестве лучшей практики, предупреждения должны выдаваться только один раз для каждого процесса. Для этого поместите emitWarning()
за булевым значением.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
process.env
¶
Свойство process.env
возвращает объект, содержащий пользовательское окружение. См. environ(7).
Пример этого объекта выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Можно изменять этот объект, но такие изменения не будут отражены за пределами процесса Node.js или (если только они не запрошены явно) в других потоках Worker
. Другими словами, следующий пример не будет работать:
1 |
|
В то время как следующий пример будет работать:
1 2 3 4 |
|
1 2 3 4 |
|
Присвоение свойства process.env
неявно преобразует значение в строку. Это поведение устарело. Будущие версии Node.js могут выдать ошибку, если значение не является строкой, числом или булевой функцией.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
Используйте delete
для удаления свойства из process.env
.
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
В операционных системах Windows переменные окружения не чувствительны к регистру.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Если это явно не указано при создании экземпляра Worker
, каждый поток Worker
имеет свою собственную копию process.env
, основанную на process.env
его родительского потока, или на том, что было указано в качестве опции env
в конструкторе Worker
. Изменения в process.env
не будут видны в потоках Worker
, и только главный поток может вносить изменения, видимые операционной системе или встроенным дополнениям.
process.execArgv
¶
Свойство process.execArgv
возвращает набор специфических для Node.js опций командной строки, переданных при запуске процесса Node.js. Эти опции не появляются в массиве, возвращаемом свойством process.argv
, и не включают исполняемый файл Node.js, имя скрипта или любые опции, следующие за именем скрипта. Эти опции полезны для порождения дочерних процессов с той же средой выполнения, что и родительский.
1 |
|
Результат в process.execArgv
:
1 |
|
И process.argv
:
1 |
|
Обратитесь к конструктору Worker
для детального поведения рабочих потоков с этим свойством.
process.execPath
¶
Свойство process.execPath
возвращает абсолютное имя пути исполняемого файла, который запустил процесс Node.js. Символьные ссылки, если таковые имеются, разрешаются.
1 |
|
process.exit([code])
¶
code
{integer|string|null|undefined} Код завершения. Для типа string допускаются только целые строки (например, '1'). По умолчанию:0
.
Метод process.exit()
указывает Node.js завершить процесс синхронно со статусом завершения code
. Если code
опущен, exit использует либо код "успеха" 0
, либо значение process.exitCode
, если оно было установлено. Node.js не завершится, пока не будут вызваны все слушатели события 'exit'
.
Для выхода с кодом "неудача":
1 2 3 |
|
1 2 3 |
|
Оболочка, которая выполнила Node.js, должна увидеть код выхода как 1
.
Вызов process.exit()
заставит процесс завершиться как можно быстрее, даже если в процессе еще остались асинхронные операции, которые еще не завершились полностью, включая операции ввода-вывода в process.stdout
и process.stderr
.
В большинстве ситуаций нет необходимости явно вызывать process.exit()
. Процесс Node.js завершится сам по себе, если в цикле событий не будет дополнительной работы. Свойство process.exitCode
может быть установлено, чтобы указать процессу, какой код выхода использовать при изящном завершении процесса.
Например, следующий пример иллюстрирует неправильное использование метода process.exit()
, которое может привести к усечению и потере данных, выводимых на stdout:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
Проблема заключается в том, что запись в process.stdout
в Node.js иногда асинхронна и может происходить в течение нескольких тактов цикла событий Node.js. Вызов process.exit()
, однако, заставляет процесс завершить работу до того, как эти дополнительные записи в stdout
могут быть выполнены.
Вместо прямого вызова process.exit()
, код должен установить process.exitCode
и позволить процессу завершиться естественным образом, избегая планирования дополнительной работы для цикла событий:
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
Если необходимо завершить процесс Node.js из-за ошибки, то выброс не пойманной ошибки и разрешение процессу завершиться соответствующим образом безопаснее, чем вызов process.exit()
.
В потоках Worker
эта функция останавливает текущий поток, а не текущий процесс.
process.exitCode
¶
- {integer|string|null|undefined} Код выхода. Для строкового типа допускаются только целые строки (например, '1'). По умолчанию:
undefined
.
Число, которое будет кодом завершения процесса, когда процесс либо завершается изящно, либо завершается через process.exit()
без указания кода.
Указание кода в process.exit(code)
отменяет любую предыдущую установку process.exitCode
.
process.getActiveResourcesInfo()
¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
- Возвращает:
<string[]>
Метод process.getActiveResourcesInfo()
возвращает массив строк, содержащих типы активных ресурсов, которые в настоящее время поддерживают цикл событий.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
process.getegid()
¶
Метод process.getegid()
возвращает числовую эффективную групповую идентификацию процесса Node.js. (См. getegid(2).)
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android).
process.geteuid()
¶
- Возвращает:
<Object>
Метод process.geteuid()
возвращает числовой эффективный идентификатор пользователя процесса. (См. geteuid(2).)
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android).
process.getgid()
¶
- Возвращает:
<Object>
Метод process.getgid()
возвращает числовой групповой идентификатор процесса. (См. getgid(2).)
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android).
process.getgroups()
¶
- Возвращает:
<integer[]>
Метод process.getgroups()
возвращает массив с идентификаторами дополнительных групп. POSIX не уточняет, включен ли идентификатор эффективной группы, но Node.js гарантирует, что он всегда включен.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android).
process.getuid()
¶
- Возвращает:
<integer>
Метод process.getuid()
возвращает числовой идентификатор пользователя процесса. (См. getuid(2).)
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android).
process.hasUncaughtExceptionCaptureCallback()
¶
- Возвращает:
<boolean>
Указывает, был ли установлен обратный вызов с помощью process.setUncaughtExceptionCaptureCallback()
.
process.hrtime([time])
¶
Стабильность: 3 – Закрыто
Принимаются только фиксы, связанные с безопасностью, производительностью или баг-фиксы. Пожалуйста, не предлагайте изменений АПИ в разделе с таким индикатором, они будут отклонены.
Вместо этого используйте process.hrtime.bigint()
.
time
{integer[]} Результат предыдущего вызоваprocess.hrtime()
.- Возвращает: {integer[]}
Это унаследованная версия process.hrtime.bigint()
до появления bigint
в JavaScript.
Метод process.hrtime()
возвращает текущее реальное время высокого разрешения в виде кортежа [секунды, наносекунды]
, где наносекунды
- это оставшаяся часть реального времени, которая не может быть представлена с точностью до секунды.
time
- необязательный параметр, который должен быть результатом предыдущего вызова process.hrtime()
для дифференциации с текущим временем. Если переданный параметр не является кортежем Array
, будет выдана ошибка TypeError
. Передача пользовательского массива вместо результата предыдущего вызова process.hrtime()
приведет к неопределенному поведению.
Эти времена относятся к произвольному времени в прошлом, не связаны со временем суток и поэтому не подвержены дрейфу часов. Основное применение - измерение производительности между интервалами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
process.hrtime.bigint()
¶
- Возвращает:
<bigint>
bigint
версия метода process.hrtime()
, возвращающая текущее реальное время высокого разрешения в наносекундах в виде bigint
.
В отличие от метода process.hrtime()
, он не поддерживает дополнительный аргумент time
, поскольку разница может быть вычислена непосредственно вычитанием двух bigint
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
process.initgroups(user, extraGroup)
¶
user
{string|number} Имя пользователя или числовой идентификатор.extraGroup
{string|number} Имя группы или числовой идентификатор.
Метод process.initgroups()
читает файл /etc/group
и инициализирует список доступа групп, используя все группы, членом которых является пользователь. Это привилегированная операция, которая требует, чтобы процесс Node.js имел либо доступ root
, либо возможность CAP_SETGID
.
Будьте осторожны при сбросе привилегий:
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.kill(pid[, signal])
¶
pid
<number>
Идентификатор процессаsignal
{строка|число} Сигнал для отправки, либо в виде строки, либо в виде числа. По умолчанию:'SIGTERM'
.
Метод process.kill()
посылает signal
процессу, идентифицированному pid
.
Имена сигналов - это строки, такие как 'SIGINT'
или 'SIGHUP'
. Более подробную информацию смотрите в Signal Events и kill(2).
Этот метод выдаст ошибку, если целевой pid
не существует. В качестве особого случая, сигнал 0
может быть использован для проверки существования процесса. Платформы Windows выдадут ошибку, если pid
используется для уничтожения группы процессов.
Хотя эта функция называется process.kill()
, на самом деле это просто отправитель сигнала, как и системный вызов kill
. Посылаемый сигнал может делать что-то еще, кроме уничтожения целевого процесса.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Когда SIGUSR1
получен процессом Node.js, Node.js запустит отладчик. Смотрите Сигнальные события.
process.mainModule
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Используйте require.main
вместо этого.
Свойство process.mainModule
предоставляет альтернативный способ получения require.main
. Разница заключается в том, что если главный модуль меняется во время выполнения, require.main
может по-прежнему ссылаться на исходный главный модуль в модулях, которые были необходимы до изменения. В целом, можно считать, что эти две ссылки относятся к одному и тому же модулю.
Как и в случае с require.main
, process.mainModule
будет undefined
, если нет скрипта входа.
process.memoryUsage()
¶
- Возвращает:
<Object>
Возвращает объект, описывающий использование памяти процессом Node.js, измеренное в байтах.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
heapTotal
иheapUsed
относятся к использованию памяти V8.external
относится к использованию памяти объектов C++, связанных с объектами JavaScript, управляемыми V8.rss
, Resident Set Size, - это объем пространства, занимаемый в основном устройстве памяти (которое является подмножеством всей выделенной памяти) для процесса, включая все объекты и код C++ и JavaScript.arrayBuffers
относится к памяти, выделенной дляArrayBuffer
иSharedArrayBuffer
, включая все Node.jsBuffer
s. Это также включено в значениеexternal
. Когда Node.js используется как встроенная библиотека, это значение может быть0
, потому что выделения дляArrayBuffer
в этом случае могут не отслеживаться.
При использовании потоков Worker
, rss
будет значением, действительным для всего процесса, в то время как остальные поля будут относиться только к текущему потоку.
Метод process.memoryUsage()
выполняет итерации по каждой странице для сбора информации об использовании памяти, что может быть медленным в зависимости от распределения памяти программы.
process.memoryUsage.rss()
¶
- Возвращает:
<integer>
Метод process.memoryUsage.rss()
возвращает целое число, представляющее размер резидентного набора (RSS) в байтах.
Resident Set Size - это объем пространства, занимаемый в основной памяти (которая является подмножеством всей выделенной памяти) для процесса, включая все объекты и код C++ и JavaScript.
Это то же значение, что и свойство rss
, предоставляемое process.memoryUsage()
, но process.memoryUsage.rss()
быстрее.
1 2 3 4 |
|
1 2 3 4 |
|
process.nextTick(callback[, ...args])
¶
callback
<Function>
...args
{любые} Дополнительные аргументы для передачи при вызовеcallback
.
Функция process.nextTick()
добавляет callback
в "очередь следующего тика". Эта очередь полностью опустошается после завершения текущей операции на стеке JavaScript и перед тем, как цикл событий будет продолжен. Можно создать бесконечный цикл, если рекурсивно вызывать process.nextTick()
. Дополнительную информацию см. в руководстве Event Loop.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Это важно при разработке API, чтобы дать пользователям возможность назначать обработчики событий после создания объекта, но до того, как произойдет ввод/вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Очень важно, чтобы API были либо на 100% синхронными, либо на 100% асинхронными. Рассмотрим этот пример:
1 2 3 4 5 6 7 8 9 |
|
Этот API опасен, поскольку в следующем случае:
1 2 3 4 5 6 7 |
|
Неясно, что будет вызвано первым - foo()
или bar()
.
Следующий подход намного лучше:
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Когда использовать queueMicrotask()
против process.nextTick()
¶
API queueMicrotask()
- это альтернатива process.nextTick()
, которая также откладывает выполнение функции, используя ту же очередь микрозадач, которая используется для выполнения обработчиков then, catch и finally разрешенных обещаний. В Node.js каждый раз, когда "очередь следующего тика" опустошается, очередь микрозадач опустошается сразу после этого.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Для большинства пользовательских сценариев API queueMicrotask()
предоставляет переносимый и надежный механизм отсрочки выполнения, который работает в различных средах платформы JavaScript, и ему следует отдать предпочтение перед process.nextTick()
. В простых сценариях queueMicrotask()
может стать полноценной заменой process.nextTick()
.
1 2 3 4 5 6 7 8 9 |
|
Одно заслуживающее внимания различие между двумя API заключается в том, что process.nextTick()
позволяет указать дополнительные значения, которые будут переданы в качестве аргументов отложенной функции при ее вызове. Для достижения того же результата с помощью queueMicrotask()
необходимо использовать либо закрытие, либо связанную функцию:
1 2 3 4 5 6 7 8 9 10 11 |
|
Существуют незначительные различия в том, как обрабатываются ошибки, возникающие внутри очереди следующего тика и очереди микрозадач. Ошибки, возникающие внутри очереди обратного вызова микрозадачи, должны обрабатываться внутри очереди обратного вызова, когда это возможно. Если это невозможно, то для перехвата и обработки ошибок можно использовать обработчик событий process.on('uncaughtException')
.
В случае сомнений, если не требуются специфические возможности process.nextTick()
, используйте queueMicrotask()
.
process.noDeprecation
¶
Свойство process.noDeprecation
указывает, установлен ли флаг --no-deprecation
для текущего процесса Node.js. Более подробную информацию о поведении этого флага смотрите в документации к событию 'warning'
' и методу emitWarning()
.
process.permission
¶
Этот API доступен через флаг --experimental-permission
.
process.permission
- это объект, методы которого используются для управления разрешениями для текущего процесса. Дополнительная документация доступна в Permission Model.
process.permission.deny(scope[, reference])
.¶
Запрет разрешений во время выполнения.
Доступными областями являются:
fs
- Вся файловая системаfs.read
- Операции чтения файловой системыfs.write
- операции записи в файловой системе
Ссылка имеет значение, основанное на предоставленной области видимости. Например, ссылка, когда область видимости - Файловая система, означает файлы и папки.
1 2 3 4 |
|
process.permission.has(scope[, reference])
.¶
Проверяет, может ли процесс получить доступ к заданной области видимости и ссылке. Если ссылка не указана, предполагается глобальная область видимости, например, process.permission.has('fs.read')
проверит, имеет ли процесс ВСЕ разрешения на чтение файловой системы.
Ссылка имеет значение, основанное на предоставленной области видимости. Например, ссылка в области видимости File System означает файлы и папки.
Доступными областями являются:
fs
- Вся файловая системаfs.read
- операции чтения файловой системыfs.write
- операции записи в файловой системе
1 2 3 4 |
|
process.pid
¶
Свойство process.pid
возвращает PID процесса.
1 2 3 |
|
1 2 3 |
|
process.platform
¶
Свойство process.platform
возвращает строку, идентифицирующую платформу операционной системы, для которой был скомпилирован бинарный файл Node.js.
В настоящее время возможными значениями являются:
aix
darwin
freebsd
linux
openbsd
Sunos
win32
1 2 3 |
|
1 2 3 |
|
Значение 'android'
также может быть возвращено, если Node.js построен на операционной системе Android. Однако поддержка Android в Node.js является экспериментальной.
process.ppid
¶
Свойство process.ppid
возвращает PID родителя текущего процесса.
1 2 3 |
|
1 2 3 |
|
process.release
¶
Свойство process.release
возвращает Object
, содержащий метаданные, относящиеся к текущему релизу, включая URL-адреса исходного tarball и tarball только с заголовками.
process.release
содержит следующие свойства:
name
<string>
Значение, которое всегда будет `'node''.sourceUrl
<string>
абсолютный URL, указывающий на файл.tar.gz
, содержащий исходный код текущего релиза.headersUrl
<string>
абсолютный URL, указывающий на файл.tar.gz
, содержащий только заголовочные файлы исходного кода текущего выпуска. Этот файл значительно меньше полного исходного файла и может быть использован для компиляции нативных дополнений Node.js.libUrl
{string|undefined} абсолютный URL, указывающий на файлnode.lib
, соответствующий архитектуре и версии текущего выпуска. Этот файл используется для компиляции встроенных дополнений Node.js. Это свойство присутствует только в Windows-сборках Node.js и будет отсутствовать на всех остальных платформах.lts
{string|undefined} строковая метка, идентифицирующая метку LTS для этого выпуска. Это свойство существует только для релизов LTS и являетсянеопределенным
для всех других типов релизов, включая релизы Current. Допустимые значения включают кодовые имена релизов LTS (включая те, которые больше не поддерживаются).'Fermium'
для линейки 14.x LTS, начиная с 14.15.0.Галлий
для линейки 16.x LTS, начиная с 16.13.0.Водород
для линейки 18.x LTS, начиная с 18.12.0. Другие кодовые названия релизов LTS смотрите в Node.js Changelog Archive.
1 2 3 4 5 6 7 |
|
В пользовательских сборках из нерелизных версий дерева исходников может присутствовать только свойство name
. Не следует полагаться на существование дополнительных свойств.
process.report
¶
process.report
- это объект, методы которого используются для создания диагностических отчетов для текущего процесса. Дополнительная документация доступна в документации report documentation.
process.report.compact
¶
Записывать отчеты в компактном формате, однострочном JSON, более удобном для систем обработки журналов, чем многострочный формат по умолчанию, предназначенный для человеческого потребления.
1 2 3 4 |
|
1 2 3 |
|
process.report.directory
¶
Каталог, в который записывается отчет. Значение по умолчанию - пустая строка, указывающая, что отчеты записываются в текущий рабочий каталог процесса Node.js.
1 2 3 |
|
1 2 3 |
|
process.report.filename
¶
Имя файла, в который записывается отчет. Если установлено значение пустой строки, имя выходного файла будет состоять из метки времени, PID и номера последовательности. Значение по умолчанию - пустая строка.
Если значение process.report.filename
установлено в 'stdout'
или 'stderr'
, отчет будет записан в stdout или stderr процесса соответственно.
1 2 3 |
|
1 2 3 |
|
process.report.getReport([err])
¶
err
<Error>
Пользовательская ошибка, используемая для отчета о стеке JavaScript.- Возвращает:
<Object>
Возвращает представление JavaScript-объекта диагностического отчета для запущенного процесса. Трассировка стека JavaScript в отчете берется из err
, если присутствует.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Дополнительная документация доступна в документации по отчету.
process.report.reportOnFatalError
¶
Если true
, генерируется диагностический отчет о фатальных ошибках, таких как ошибки выхода из памяти или неудачные утверждения C++.
1 2 3 4 5 |
|
1 2 3 4 |
|
process.report.reportOnSignal
¶
Если true
, диагностический отчет генерируется, когда процесс получает сигнал, указанный process.report.signal
.
1 2 3 |
|
1 2 3 |
|
process.report.reportOnUncaughtException
¶
Если true
, диагностический отчет генерируется при не пойманном исключении.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
process.report.signal
¶
Сигнал, используемый для запуска создания диагностического отчета. По умолчанию 'SIGUSR2'
.
1 2 3 |
|
1 2 3 |
|
process.report.writeReport([filename][, err])
.¶
-
filename
<string>
Имя файла, в который записывается отчет. Это должен быть относительный путь, который будет добавлен к директории, указанной вprocess.report.directory
, или к текущей рабочей директории процесса Node.js, если она не указана. -
err
<Error>
Пользовательская ошибка, используемая для отчета о стеке JavaScript. -
Возвращает:
<string>
Возвращает имя файла сгенерированного отчета.
Записывает диагностический отчет в файл. Если filename
не указано, имя файла по умолчанию включает дату, время, PID и порядковый номер. Трассировка стека JavaScript в отчете берется из err
, если присутствует.
Если значение filename
имеет значение 'stdout'
или 'stderr'
, отчет записывается в stdout или stderr процесса соответственно.
1 2 3 |
|
1 2 3 |
|
Дополнительная документация доступна в документации report documentation.
process.resourceUsage()
¶
- Возвращает:
<Object>
использование ресурсов для текущего процесса. Все эти значения берутся из вызоваuv_getrusage
, который возвращаетuv_rusage_t
struct.userCPUTime
<integer>
отображается наru_utime
, вычисляемое в микросекундах. Это то же значение, что иprocess.cpuUsage().user
.systemCPUTime
<integer>
отображаетru_stime
, вычисляемое в микросекундах. Это то же значение, что иprocess.cpuUsage().system
.maxRSS
<integer>
отображается наru_maxrss
, который является максимальным размером используемого резидентного набора в килобайтах.sharedMemorySize
<integer>
отображается наru_ixrss
, но не поддерживается ни одной платформой.unsharedDataSize
<integer>
соответствуетru_idrss
, но не поддерживается ни одной платформой.unsharedStackSize
<integer>
соответствуетru_isrss
, но не поддерживается ни одной платформой.minorPageFault
<integer>
отображается наru_minflt
, что является количеством мелких ошибок страниц для процесса, см. подробнее эта статья.majorPageFault
<integer>
отображается наru_majflt
, которое является числом основных ошибок страниц для процесса, смотрите эту статью подробнее. Это поле не поддерживается в Windows.swappedOut
<integer>
соответствуетru_nswap
, но не поддерживается ни одной платформой.fsRead
<integer>
отображается наru_inblock
, что является количеством раз, когда файловая система должна была выполнить ввод.fsWrite
<integer>
обозначаетru_oublock
, т.е. количество раз, когда файловая система должна была выполнить вывод.ipcSent
<integer>
соответствуетru_msgsnd
, но не поддерживается ни одной платформой.ipcReceived
<integer>
соответствуетru_msgrcv
, но не поддерживается ни одной платформой.signalsCount
<integer>
отображается наru_nsignals
, но не поддерживается ни одной платформой.voluntaryContextSwitches
<integer>
отображается наru_nvcsw
и представляет собой количество случаев, когда переключение контекста процессора произошло из-за того, что процесс добровольно отдал процессор до завершения своего временного среза (обычно для ожидания доступности ресурса). Это поле не поддерживается в Windows.involuntaryContextSwitches
<integer>
отображаетru_nivcsw
, которое представляет собой количество раз, когда переключение контекста процессора произошло из-за того, что процесс с более высоким приоритетом стал выполнимым или из-за того, что текущий процесс превысил свой временной срез. Это поле не поддерживается в Windows.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
process.send(message[, sendHandle[, options]][, callback])
¶
message
<Object>
sendHandle
{net.Server|net.Socket}options
<Object>
используется для параметризации отправки определенных типов дескрипторов.options
поддерживает следующие свойства:keepOpen
<boolean>
Значение, которое может использоваться при передаче экземпляровnet.Socket
. Еслиtrue
, сокет остается открытым в процессе отправки. По умолчанию:false
.
callback
<Function>
- Возвращает:
<boolean>
.
Если Node.js порожден с IPC-каналом, метод process.send()
может быть использован для отправки сообщений родительскому процессу. Сообщения будут получены как событие 'message'
на объекте ChildProcess
родительского процесса.
Если Node.js не был порожден с IPC каналом, process.send
будет undefined
.
Сообщение проходит сериализацию и синтаксический анализ. Полученное сообщение может отличаться от первоначально отправленного.
process.setegid(id)
¶
id
{string|number} Имя группы или идентификатор.
Метод process.setegid()
устанавливает эффективный групповой идентификатор процесса. (См. setegid(2).) Значение id
может быть передано как числовой идентификатор или строка имени группы. Если указано имя группы, этот метод блокируется на время разрешения связанного с ним числового идентификатора.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.seteuid(id)
¶
id
{string|number} Имя пользователя или идентификатор.
Метод process.seteuid()
устанавливает эффективную идентификацию пользователя процесса. (См. seteuid(2).) Значение id
может быть передано как числовой идентификатор или строка имени пользователя. Если указано имя пользователя, метод блокируется на время разрешения связанного с ним числового идентификатора.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.setgid(id)
¶
id
{string|number} Имя или идентификатор группы
Метод process.setgid()
устанавливает групповой идентификатор процесса. (См. setgid(2).) Значение id
может быть передано как числовой идентификатор или строка имени группы. Если указано имя группы, этот метод блокируется на время разрешения связанного с ним числового идентификатора.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.setgroups(groups)
¶
groups
<integer[]>
Метод process.setgroups()
устанавливает идентификаторы дополнительных групп для процесса Node.js. Это привилегированная операция, которая требует, чтобы процесс Node.js имел права root
или CAP_SETGID
.
Массив groups
может содержать числовые идентификаторы групп, имена групп или и то, и другое.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.setuid(id)
¶
id
{целое число | строка}
Метод process.setuid(id)
устанавливает идентификатор пользователя процесса. (См. setuid(2).) Значение id
может быть передано как числовой идентификатор или как строка имени пользователя. Если указано имя пользователя, метод блокируется на время разрешения связанного с ним числового идентификатора.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Эта функция доступна только на POSIX платформах (т.е. не Windows или Android). Эта функция недоступна в потоках Worker
.
process.setSourceMapsEnabled(val)
¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
val
<boolean>
Эта функция включает или выключает поддержку Source Map v3 для трассировки стека.
Она предоставляет те же возможности, что и запуск процесса Node.js с опциями командной строки --enable-source-maps
.
Будут разобраны и загружены только карты источников в JavaScript файлах, которые загружаются после включения source maps.
process.setUncaughtExceptionCaptureCallback(fn)
¶
fn
{Function|null}
Функция process.setUncaughtExceptionCaptureCallback()
устанавливает функцию, которая будет вызываться при возникновении не пойманного исключения и будет принимать в качестве первого аргумента само значение исключения.
Если такая функция установлена, то событие 'uncaughtException'
не будет испущено. Если функция --abort-on-uncaught-exception
была передана из командной строки или задана через v8.setFlagsFromString()
, процесс не прервется. Действия, настроенные на выполнение при исключениях, таких как генерация отчетов, также будут затронуты.
Для отмены функции перехвата можно использовать process.setUncaughtExceptionCaptureCallback(null)
. Вызов этого метода с аргументом не null
, когда установлена другая функция захвата, приведет к ошибке.
Использование этой функции исключает использование устаревшего встроенного модуля domain
.
process.stderr
¶
Свойство process.stderr
возвращает поток, подключенный к stderr
(fd 2
). Это net.Socket
(который является Duplex потоком), если только fd 2
не ссылается на файл, в этом случае это Writable поток.
process.stderr
отличается от других потоков Node.js важным образом. Дополнительную информацию смотрите в заметке о процессах ввода/вывода.
process.stderr.fd
¶
Это свойство относится к значению базового дескриптора файла process.stderr
. Значение фиксировано на 2
. В потоках Worker
это поле не существует.
process.stdin
¶
Свойство process.stdin
возвращает поток, подключенный к stdin
(fd 0
). Это net.Socket
(который является Duplex потоком), если только fd 0
не ссылается на файл, в этом случае это Readable поток.
О том, как читать из stdin
, смотрите readable.read()
.
Как поток Duplex, process.stdin
может также использоваться в "старом" режиме, который совместим со скриптами, написанными для Node.js до версии 0.10. Для получения дополнительной информации смотрите Совместимость потоков.
В режиме "старых" потоков поток stdin
по умолчанию приостановлен, поэтому для чтения из него необходимо вызвать process.stdin.resume()
. Заметим также, что вызов process.stdin.resume()
сам по себе переключит поток в "старый" режим.
process.stdin.fd
¶
Это свойство относится к значению базового дескриптора файла process.stdin
. Значение фиксировано на 0
. В потоках Worker
это поле не существует.
process.stdout
¶
Свойство process.stdout
возвращает поток, подключенный к stdout
(fd 1
). Это net.Socket
(который является Duplex потоком), если только fd 1
не ссылается на файл, в этом случае это Writable поток.
Например, чтобы скопировать process.stdin
в process.stdout
:
1 2 3 |
|
1 2 3 |
|
process.stdout
отличается от других потоков Node.js важным образом. Более подробную информацию смотрите в заметке о процессах ввода/вывода.
process.stdout.fd
¶
Это свойство относится к значению базового дескриптора файла process.stdout
. Значение фиксировано и равно 1
. В потоках Worker
это поле не существует.
Замечание о вводе-выводе процессов¶
process.stdout
и process.stderr
отличаются от других потоков Node.js важным образом:
- Они используются внутри
console.log()
иconsole.error()
, соответственно. - Запись может быть синхронной в зависимости от того, к чему подключен поток и является ли система Windows или POSIX:
- Файлы: синхронные в Windows и POSIX.
- TTY (терминалы): асинхронный в Windows, синхронный в POSIX.
- Трубы (и сокеты): синхронный в Windows, асинхронный в POSIX
Такое поведение отчасти объясняется историческими причинами, поскольку его изменение привело бы к обратной несовместимости, но некоторые пользователи ожидают именно такого поведения.
Синхронная запись позволяет избежать таких проблем, как неожиданное чередование вывода, записываемого с помощью console.log()
или console.error()
, или его полное отсутствие, если process.exit()
вызывается до завершения асинхронной записи. Дополнительную информацию смотрите в process.exit()
.
Предупреждение: Синхронная запись блокирует цикл событий до тех пор, пока запись не завершится. Это может быть почти мгновенным в случае вывода в файл, но при высокой нагрузке на систему, при использовании труб, которые не читаются на принимающей стороне, или при медленных терминалах или файловых системах, цикл событий может блокироваться достаточно часто и достаточно долго, чтобы оказать серьезное негативное влияние на производительность. Это может не представлять проблемы при записи в интерактивный терминальный сеанс, но будьте особенно внимательны при ведении производственного журнала в выходные потоки процесса.
Чтобы проверить, подключен ли поток к контексту TTY, проверьте свойство isTTY
.
Например:
1 2 3 4 5 6 7 8 |
|
Дополнительную информацию см. в документации TTY.
process.throwDeprecation
¶
Начальное значение process.throwDeprecation
указывает, установлен ли флаг --throw-deprecation
для текущего процесса Node.js. Значение process.throwDeprecation
является изменяемым, поэтому то, приводят ли предупреждения о депривации к ошибкам, может быть изменено во время выполнения. Дополнительную информацию см. в документации к событию 'warning'``](#event-warning) и методу [
emitWarning()``.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
process.title
¶
Свойство process.title
возвращает текущий заголовок процесса (т.е. возвращает текущее значение ps
). Присвоение нового значения process.title
изменяет текущее значение ps
.
Когда присваивается новое значение, различные платформы накладывают различные ограничения на максимальную длину заголовка. Обычно такие ограничения довольно ограничены. Например, в Linux и macOS process.title
ограничен размером двоичного имени плюс длина аргументов командной строки, поскольку установка process.title
перезаписывает память argv
процесса. Node.js v0.8 позволял создавать более длинные строки заголовков процессов, также перезаписывая память environ
, но это было потенциально небезопасно и запутанно в некоторых (довольно неясных) случаях.
Присвоение значения process.title
могло не привести к точной метке в приложениях менеджера процессов, таких как macOS Activity Monitor или Windows Services Manager.
process.traceDeprecation
¶
Свойство process.traceDeprecation
указывает, установлен ли флаг --trace-deprecation
для текущего процесса Node.js. Более подробную информацию о поведении этого флага смотрите в документации к событию 'warning'
' и методу emitWarning()
.
process.umask()
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вызов process.umask()
без аргумента приводит к тому, что umask всего процесса записывается дважды. Это создает условия гонки между потоками и является потенциальной уязвимостью безопасности. Не существует безопасного, кроссплатформенного альтернативного API.
process.umask()
возвращает маску создания файлового режима процесса Node.js. Дочерние процессы наследуют маску от родительского процесса.
process.umask(mask)
¶
process.umask(mask)
устанавливает маску создания файлового режима процесса Node.js. Дочерние процессы наследуют маску от родительского процесса. Возвращает предыдущую маску.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
В потоках Worker
, process.umask(mask)
вызовет исключение.
process.uptime()
¶
- Возвращает:
<number>
Метод process.uptime()
возвращает количество секунд, в течение которых работает текущий процесс Node.js.
Возвращаемое значение включает доли секунды. Используйте Math.floor()
для получения целых секунд.
process.version
¶
Свойство process.version
содержит строку версии Node.js.
1 2 3 4 |
|
1 2 3 4 |
|
Чтобы получить строку версии без префикса v, используйте process.versions.node
.
process.versions
¶
Свойство process.versions
возвращает объект, содержащий строки версий Node.js и его зависимостей. process.versions.modules
указывает текущую версию ABI, которая увеличивается всякий раз, когда изменяется C++ API. Node.js откажется загружать модули, которые были скомпилированы с другой версией ABI модуля.
1 2 3 |
|
1 2 3 |
|
Будет сгенерирован объект, похожий на:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Коды выхода¶
Node.js обычно завершает работу с кодом состояния 0
, когда больше не ожидается никаких асинхронных операций. В других случаях используются следующие коды состояния:
1
Uncaught Fatal Exception: Произошло не пойманное исключение, и оно не было обработано доменом или обработчиком события'uncaughtException'
.2
: Не используется (зарезервировано Bash для встроенного неправильного использования)3
Внутренняя ошибка разбора JavaScript: Внутренний исходный код JavaScript в процессе загрузки Node.js вызвал ошибку разбора. Это случается крайне редко, и обычно может произойти только во время разработки самого Node.js.4
Внутренняя ошибка оценки JavaScript: Внутренний исходный код JavaScript в процессе загрузки Node.js не смог вернуть значение функции при оценке. Это случается крайне редко и, как правило, только во время разработки самого Node.js.5
Фатальная ошибка: В V8 произошла фатальная неустранимая ошибка. Обычно сообщение выводится на stderr с префиксомFATAL ERROR
.6
Неработающий внутренний обработчик исключений: Имело место непойманное исключение, но внутренняя функция обработчика фатального исключения каким-то образом была установлена на не-функцию и не могла быть вызвана.7
Сбой при запуске обработчика внутренних исключений: Произошло не пойманное исключение, а внутренняя функция обработчика фатальных исключений сама выдала ошибку при попытке его обработать. Это может произойти, например, если обработчик'uncaughtException'
илиdomain.on('error')
выбрасывает ошибку.8
: Не используется. В предыдущих версиях Node.js код выхода 8 иногда указывал на не пойманное исключение.9
Неправильный аргумент: Либо была указана неизвестная опция, либо опция, требующая значения, была предоставлена без значения.10
Внутренний сбой выполнения JavaScript: Внутренний исходный код JavaScript в процессе начальной загрузки Node.js выдал ошибку при вызове функции начальной загрузки. Это случается крайне редко и, как правило, только во время разработки самого Node.js.12
Неправильный отладочный аргумент: Были установлены опции--inspect
и/или--inspect-brk
, но выбранный номер порта был неверным или недоступным.13
Незавершенное ожидание верхнего уровня:await
использовался вне функции в коде верхнего уровня, но переданноеPromise
так и не разрешилось.14
Сбой моментального снимка: Node.js был запущен для создания стартового снапшота V8, но не смог его создать, поскольку не были выполнены определенные требования к состоянию приложения.>128
Сигнальные выходы: Если Node.js получает фатальный сигнал, такой какSIGKILL
илиSIGHUP
, то его код выхода будет равен128
плюс значение кода сигнала. Это стандартная практика POSIX, поскольку коды выхода определены как 7-битные целые числа, а сигнальные выходы устанавливают старший бит, а затем содержат значение кода сигнала. Например, сигналSIGABRT
имеет значение6
, поэтому ожидаемый код выхода будет128
+6
, или134
.