Spec-Zone.ru › Node.js 12 LTS

Процесс

Исходный код: lib/process.js

Объект process — это global, предоставляющий информацию о текущем процессе Node.js и позволяющий управлять им. Как глобальный объект, он всегда доступен приложениям Node.js без использования require(). Его также можно явно получить с помощью require().

const process = require('process');

События процесса

Объект process является экземпляром EventEmitter.

Событие: 'beforeExit'

Добавлен в: v0.11.12

Событие 'beforeExit' генерируется, когда Node.js очищает свой цикл событий и не имеет дополнительных задач для планирования. Обычно процесс Node.js завершается, когда нет запланированных задач, но обработчик, зарегистрированный на событии 'beforeExit', может выполнять асинхронные вызовы и, таким образом, заставить процесс Node.js продолжить работу.

Обработчик вызывается с значением process.exitCode в качестве единственного аргумента.

Событие 'beforeExit' не генерируется для условий явного завершения, таких как вызов process.exit() или необработанных исключений.

Событие 'beforeExit' не следует использовать в качестве альтернативы событию 'exit', если только не планируется выполнить дополнительные задачи.

process.on('beforeExit', (code) => {
  console.log('Process beforeExit event with code: ', code);
});

process.on('exit', (code) => {
  console.log('Process exit event with code: ', code);
});

console.log('This message is displayed first.');

// Prints:
// This message is displayed first.
// Process beforeExit event with code: 0
// Process exit event with code: 0

Событие: 'disconnect'

Добавлен в: v0.7.7

Если процесс Node.js запущен с каналом IPC (см. документацию Процесс-потомка и Кластер), событие 'disconnect' будет генерироваться при закрытии канала IPC.

Событие: 'exit'

Добавлен в: v0.1.7
  • code <целое число>

Событие 'exit' генерируется при предстоящем завершении процесса Node.js в результате:

  • Явного вызова метода process.exit();
  • Отсутствия дополнительных задач в цикле событий Node.js.

Нет возможности предотвратить завершение цикла событий на этом этапе, и после завершения работы всех обработчиков события 'exit' процесс Node.js завершится.

Обработчик вызывается с кодом завершения, указанным либо свойством process.exitCode, либо аргументом exitCode метода process.exit().

process.on('exit', (code) => {
  console.log(`About to exit with code: ${code}`);
});

Функции-обработчики обязаны выполнять только синхронные операции. Процесс Node.js завершится сразу после вызова обработчиков события 'exit', что приведёт к отказу от любых дополнительных задач, ожидающих выполнения в цикле событий. Например, в следующем примере таймаут никогда не произойдёт:

process.on('exit', (code) => {
  setTimeout(() => {
    console.log('This will not run');
  }, 0);
});

Событие: 'message'

Добавлен в: v0.5.10
  • message <объект> | <булево> | <число> | <строка> | <null> — распарсенный JSON-объект или сериализуемое примитивное значение.
  • sendHandle <net.Сервер> | <net.Сокет> объект net.Server или net.Socket, или undefined.

Если процесс Node.js запущен с каналом IPC (см. документацию Процесс-потомка и Кластер), событие 'message' генерируется всякий раз, когда сообщение, отправленное родительским процессом с помощью childprocess.send(), получает дочерний процесс.

Сообщение проходит сериализацию и парсинг. Результирующее сообщение может отличаться от исходного.

Если опция serialization была установлена в advanced при запуске процесса, аргумент message может содержать данные, которые JSON не может представить. Дополнительные сведения см. в разделе Расширенная сериализация для child_process.

Событие: 'multipleResolves'

Добавлен в: v10.12.0
  • type <строка> Тип разрешения. Один из 'resolve' или 'reject'.
  • promise <Promise> Promise, который был разрешён или отклонён более одного раза.
  • value <любое> Значение, с помощью которого Promise был разрешён или отклонён после первоначального разрешения.

Событие 'multipleResolves' генерируется всякий раз, когда Promise был:

  • Разрешён более одного раза.
  • Отклонён более одного раза.
  • Отклонён после разрешения.
  • Разрешён после отклонения.

Это полезно для отслеживания потенциальных ошибок в приложении при использовании конструктора Promise, поскольку несколько разрешений проглатываются безвозвратно. Однако возникновение этого события не обязательно означает ошибку. Например, Promise.race() может вызвать событие 'multipleResolves'.

process.on('multipleResolves', (type, promise, reason) => {
  console.error(type, promise, reason);
  setImmediate(() => process.exit(1));
});

async function main() {
  try {
    return await new Promise((resolve, reject) => {
      resolve('First call');
      resolve('Swallowed resolve');
      reject(new Error('Swallowed reject'));
    });
  } catch {
    throw new Error('Failed');
  }
}

main().then(console.log);
// resolve: Promise { 'First call' } 'Swallowed resolve'
// reject: Promise { 'First call' } Error: Swallowed reject
//     at Promise (*)
//     at new Promise (<anonymous>)
//     at main (*)
// First call

Событие: 'rejectionHandled'

Добавлен в: v1.4.1
  • promise <Promise> Поздно обработанный Promise.

Событие 'rejectionHandled' генерируется всякий раз, когда Promise был отклонен, и обработчик ошибок был прикреплен к нему (например, с помощью promise.catch()) позже, чем за один цикл событий Node.js.

Объект Promise ранее был сгенерирован в событии 'unhandledRejection', но в процессе обработки получил обработчик отклонений.

Нет понятия верхнего уровня для цепочки Promise, на котором отклонения всегда могут быть обработаны. В силу своей асинхронной природы, отклонение Promise может быть обработано в будущем, возможно, намного позже, чем в цикле событий, в котором генерируется событие 'unhandledRejection'.

Другими словами, в отличие от синхронного кода, где есть постоянно растущий список необработанных исключений, с Promise может быть растущий и уменьшающийся список необработанных отклонений.

В синхронном коде событие 'uncaughtException' генерируется при увеличении списка необработанных исключений.

В асинхронном коде событие 'unhandledRejection' генерируется при увеличении списка необработанных отклонений, а событие 'rejectionHandled' генерируется при уменьшении списка необработанных отклонений.

const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, promise) => {
  unhandledRejections.set(promise, reason);
});
process.on('rejectionHandled', (promise) => {
  unhandledRejections.delete(promise);
});

В этом примере, список unhandledRejections Map будет расти и уменьшаться со временем, отражая отклонения, которые начинаются как необработанные, а затем становятся обработанными. Такие ошибки можно регистрировать в журнале ошибок либо периодически (что, вероятно, лучше для долгоработающих приложений), либо при выходе из процесса (что, вероятно, удобнее для скриптов).

Событие: 'uncaughtException'

История
Версия Изменения
v12.0.0

Добавлен аргумент origin.

v0.1.18

Добавлен в: v0.1.18

  • err <Ошибка> Необработанное исключение.
  • origin <строка> Указывает, происходит ли исключение из-за необработанного отклонения или синхронной ошибки. Может быть 'uncaughtException' или 'unhandledRejection'. Последний используется только в сочетании со флагом --unhandled-rejections , установленным в strict, и необработанным отклонением.

Событие 'uncaughtException' генерируется, когда необработанное JavaScript-исключение возвращается в цикл событий. По умолчанию Node.js обрабатывает такие исключения, выводя отладочную информацию в stderr и завершая работу с кодом 1, игнорируя любой ранее заданный process.exitCode. Добавление обработчика для события 'uncaughtException' переопределяет это поведение по умолчанию. Альтернативно, измените process.exitCode в обработчике события 'uncaughtException', что приведёт к завершению процесса с указанным кодом завершения. В противном случае, в присутствии такого обработчика, процесс завершится с кодом 0.

process.on('uncaughtException', (err, origin) => {
  fs.writeSync(
    process.stderr.fd,
    `Caught exception: ${err}\n` +
    `Exception origin: ${origin}`
  );
});

setTimeout(() => {
  console.log('This will still run.');
}, 500);

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

Можно отслеживать события 'uncaughtException' без переопределения поведения по умолчанию по завершению процесса, установив обработчик для события 'uncaughtExceptionMonitor'.

Предупреждение: Правильное использование 'uncaughtException'

'uncaughtException' — это грубый механизм обработки исключений, который следует использовать только в крайних случаях. Его не следует применять в качестве замены On Error Resume Next . Необработанные исключения подразумевают, что приложение находится в неопределённом состоянии. Попытка продолжить работу приложения без надлежащего восстановления после исключения может привести к дополнительным непредвиденным и непредсказуемым проблемам.

Исключения, сгенерированные внутри обработчика события, не будут перехвачены. Вместо этого процесс завершится с ненулевым кодом завершения, и будет выведен стек вызовов. Это делается для предотвращения бесконечной рекурсии.

Попытка продолжить работу приложения после необработанного исключения может быть подобна отключению питания при обновлении компьютера. В девяти случаях из десяти ничего не произойдёт. Но в десятом случае система может быть повреждена.

Правильное использование 'uncaughtException' заключается в выполнении синхронной очистки выделенных ресурсов (например, дескрипторов файлов, дескрипторов, и т.д.) перед завершением процесса. После 'uncaughtException' безопасно продолжать обычную работу.

Для более надёжного перезапуска аварийного приложения, независимо от того, был ли выведен 'uncaughtException', следует использовать внешний монитор в отдельном процессе для обнаружения сбоев приложения и последующего восстановления или перезапуска по мере необходимости.

Событие: 'uncaughtExceptionMonitor'

Добавлен в: v12.17.0
  • err <Error> Необработанное исключение.
  • origin <string> Указывает, происходит ли исключение от необработанного отклонения или от синхронных ошибок. Может быть либо 'uncaughtException', либо 'unhandledRejection'.

Событие 'uncaughtExceptionMonitor' генерируется перед событием 'uncaughtException' или вызовом обработчика, установленного через process.setUncaughtExceptionCaptureCallback().

Установка обработчика события 'uncaughtExceptionMonitor' не изменяет поведение после генерации события 'uncaughtException'. Процесс всё равно аварийно завершится, если обработчик события 'uncaughtException' не установлен.

process.on('uncaughtExceptionMonitor', (err, origin) => {
  MyMonitoringTool.logSync(err, origin);
});

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
// Still crashes Node.js

Событие: 'unhandledRejection'

История
Версия Изменения
v7.0.0

Отказ от обработки Promise отклонений устарел.

v6.6.0

Необработанные Promise отклонения теперь генерируют предупреждение процесса.

v1.4.1

Добавлен в: v1.4.1

  • reason <Error> | <any> Объект, с помощью которого было отклонено обещание (обычно объект Error).
  • promise <Promise> Отклоненное обещание.

Событие 'unhandledRejection' генерируется всякий раз, когда Promise отклоняется, и к обещанию не прикреплён обработчик ошибок в течение одного цикла событий. При программировании с обещаниями исключения инкапсулируются в виде «отклоненных обещаний». Отклонения могут быть перехвачены и обработаны с помощью promise.catch() и распространяются через цепочку Promise. Событие 'unhandledRejection' полезно для обнаружения и отслеживания отклонений обещаний, которые ещё не обработаны.

process.on('unhandledRejection', (reason, promise) => {
  console.log('Unhandled Rejection at:', promise, 'reason:', reason);
  // Application specific logging, throwing an error, or other logic here
});

somePromise.then((res) => {
  return reportToUser(JSON.pasre(res)); // Note the typo (`pasre`)
}); // No `.catch()` or `.then()`

Следующие события также вызовут генерацию события %%%CODE_BLOCK_115%%:

function SomeResource() {
  // Initially set the loaded status to a rejected promise
  this.loaded = Promise.reject(new Error('Resource not yet loaded!'));
}

const resource = new SomeResource();
// no .catch or .then on resource.loaded for at least a turn

В этом примере можно отслеживать отклонение как ошибку разработчика, как обычно бывает для других событий 'unhandledRejection'. Для решения таких проблем можно подключить нерабочий обработчик .catch(() => { }) к resource.loaded, что предотвратит генерацию события 'unhandledRejection'.

Событие: 'warning'

Добавлен в: v6.0.0
  • warning <Error> Ключевые свойства предупреждения:
    • name <string> Название предупреждения. По умолчанию: 'Warning'.
    • message <string> Описание предупреждения, предоставленное системой.
    • stack <string> Трассировка стека до места в коде, где было выведено предупреждение.

Событие 'warning' генерируется всякий раз, когда Node.js генерирует предупреждение процесса.

Предупреждение процесса аналогично ошибке, поскольку оно описывает исключительные ситуации, которые привлекают внимание пользователя. Однако предупреждения не входят в обычный поток обработки ошибок Node.js и JavaScript. Node.js может генерировать предупреждения всякий раз, когда обнаруживает плохие практические приемы программирования, которые могут привести к неэффективному исполнению приложения, ошибкам или уязвимостям.

process.on('warning', (warning) => {
  console.warn(warning.name);    // Print the warning name
  console.warn(warning.message); // Print the warning message
  console.warn(warning.stack);   // Print the stack trace
});

По умолчанию Node.js выводит предупреждения процесса в stderr. Флаг --no-warnings командной строки можно использовать для подавления стандартного вывода в консоль, но событие 'warning' всё ещё будет генерироваться объектом process.

Следующий пример демонстрирует предупреждение, которое выводится в stderr, когда к событию добавлено слишком много обработчиков:

$ node
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> (node:38638) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 2 foo listeners added. Use emitter.setMaxListeners() to increase limit

В противоположность этому, в следующем примере выключается стандартный вывод предупреждений в консоль и добавляется пользовательский обработчик события 'warning':

$ node --no-warnings
> const p = process.on('warning', (warning) => console.warn('Do not do that!'));
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> Do not do that!

Флаг --trace-warnings командной строки позволяет включить вывод полного стека следов в стандартный вывод предупреждений в консоли.

Запуск Node.js с флагом командной строки --throw-deprecation приведет к тому, что пользовательские предупреждения об устаревании будут выбрасываться как исключения.

Использование флага командной строки --trace-deprecation выведет пользовательское предупреждение об устаревании в stderr вместе с трассировкой стека.

Использование флага командной строки --no-deprecation подавит весь вывод пользовательского предупреждения об устаревании.

Флаги командной строки *-deprecation влияют только на предупреждения, использующие имя 'DeprecationWarning'.

Генерация пользовательских предупреждений

См. метод process.emitWarning() для выдачи пользовательских или специфичных для приложения предупреждений.

События сигналов

События сигналов генерируются, когда процесс Node.js получает сигнал. Справочную информацию по стандартным именам сигналов POSIX, таким как 'SIGINT', 'SIGHUP', и т.д., можно найти в signal(7).

Сигналы недоступны в потоках Worker.

Обработчик сигнала получит имя сигнала ('SIGINT', 'SIGTERM', и т.д.) в качестве первого аргумента.

Имя каждого события будет общим заглавным именем сигнала (например, 'SIGINT' для SIGINT сигналов).

// Begin reading from stdin so the process does not exit.
process.stdin.resume();

process.on('SIGINT', () => {
  console.log('Received SIGINT. Press Control-D to exit.');
});

// Using a single function to handle multiple signals
function handle(signal) {
  console.log(`Received ${signal}`);
}

process.on('SIGINT', handle);
process.on('SIGTERM', handle);
  • 'SIGUSR1' зарезервирован Node.js для запуска отладчика. Возможно установить обработчик, но это может повлиять на работу отладчика.
  • 'SIGTERM' и 'SIGINT' имеют обработчики по умолчанию на платформах, отличных от Windows, которые сбрасывают режим терминала перед завершением с кодом 128 + signal number. Если для одного из этих сигналов установлен обработчик, его поведение по умолчанию будет удалено (Node.js больше не завершится).
  • 'SIGPIPE' игнорируется по умолчанию. Его можно обработать.
  • 'SIGHUP' генерируется в Windows при закрытии окна консоли и на других платформах в различных аналогичных ситуациях. См. signal(7). Его можно обработать, однако Node.js будет безусловно завершён Windows примерно через 10 секунд. На платформах, отличных от Windows, поведение по умолчанию для SIGHUP — завершение Node.js, но после установки обработчика его поведение по умолчанию будет удалено.
  • 'SIGTERM' не поддерживается в Windows, но его можно обработать.
  • 'SIGINT' из терминала поддерживается на всех платформах и обычно генерируется нажатием Ctrl+C (хотя это может быть настраиваемо). Он не генерируется, когда включен режим терминала raw и используется Ctrl+C.
  • 'SIGBREAK' выдаётся в Windows при нажатии Ctrl+Break. На платформах, отличных от Windows, его можно обработать, но нет способа его отправить или сгенерировать.
  • 'SIGWINCH' выдаётся при изменении размера консоли. В Windows это произойдёт только при записи в консоль, когда курсор перемещается или используется читабельный tty в режиме raw.
  • 'SIGKILL' не может быть обработан, он безусловно завершит Node.js на всех платформах.
  • 'SIGSTOP' не может быть обработан.
  • 'SIGBUS', 'SIGFPE', 'SIGSEGV' и 'SIGILL', если они не сгенерированы искусственно с помощью kill(2), оставляют процесс в состоянии, в котором небезопасно вызывать обработчики JS. Это может привести к зависанию процесса в бесконечном цикле, так как обработчики, подключенные с помощью process.on(), вызываются асинхронно и, следовательно, не способны исправить основную проблему.
  • 0 можно отправить для проверки существования процесса, но не оказывает никакого эффекта, если процесс существует, но выбросит ошибку, если процесса нет.

Windows не поддерживает сигналы, поэтому у неё нет эквивалента завершения по сигналу, но Node.js предлагает некоторую эмуляцию с помощью process.kill() и subprocess.kill():

  • Отправка SIGINT, SIGTERM, и SIGKILL приведёт к безусловному завершению целевого процесса, а затем подпроцесс сообщит, что процесс был завершён по сигналу.
  • Отправка сигнала 0 может использоваться как независимый от платформы способ проверки существования процесса.

process.abort()

Добавлен в: v0.7.0

Метод process.abort() заставляет процесс Node.js немедленно завершиться и создать дамп памяти.

Эта функция недоступна в потоках Worker.

process.allowedNodeEnvironmentFlags

Добавлен в: v10.10.0
  • <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, будут содержать подчёркивания вместо неведущих дефисов:

process.allowedNodeEnvironmentFlags.forEach((flag) => {
  // -r
  // --inspect-brk
  // --abort_on_uncaught_exception
  // ...
});

Методы add(), clear(), и delete() из process.allowedNodeEnvironmentFlags ничего не делают и завершатся без ошибок.

Если Node.js был скомпилирован без поддержки NODE_OPTIONS (показано в process.config), process.allowedNodeEnvironmentFlags будет содержать то, что было бы допустимо.

process.arch

Добавлен в: v0.5.0
  • <string>

Архитектура процессора операционной системы, для которой был скомпилирован двоичный файл Node.js. Возможные значения: 'arm', 'arm64', 'ia32', 'mips','mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', и 'x64'.

console.log(`This processor architecture is ${process.arch}`);

process.argv

Добавлен в: v0.1.27
  • <string[]>

Свойство process.argv возвращает массив, содержащий аргументы командной строки, переданные при запуске процесса Node.js. Первый элемент будет process.execPath. Смотрите process.argv0 если требуется доступ к исходному значению argv[0]. Второй элемент будет путём к файлу JavaScript, который выполняется. Остальные элементы будут дополнительными аргументами командной строки.

Например, предполагая следующий скрипт для process-args.js:

// print process.argv
process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
});

Запуск процесса Node.js как:

$ node process-args.js one two=three four

Сгенерирует вывод:

0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four

process.argv0

Добавлен в: v6.4.0
  • <string>

Свойство process.argv0 хранит только для чтения копию исходного значения argv[0] переданного при запуске Node.js.

$ bash -c 'exec -a customArgv0 ./node'
> process.argv[0]
'/Volumes/code/external/node/out/Release/node'
> process.argv0
'customArgv0'

process.channel

Добавлен в: v7.1.0
  • <Object>

Если процесс Node.js был запущен с каналом IPC (см. документацию Процесса дочернего процесса), свойство process.channel является ссылкой на канал IPC. Если канал IPC не существует, это свойство undefined.

process.chdir(directory)

Добавлен в: v0.1.17
  • directory <string>

Метод process.chdir() изменяет текущую рабочую директорию процесса Node.js или вызывает исключение, если это не удалось (например, если указанная directory не существует).

console.log(`Starting directory: ${process.cwd()}`);
try {
  process.chdir('/tmp');
  console.log(`New directory: ${process.cwd()}`);
} catch (err) {
  console.error(`chdir: ${err}`);
}

Эта функция недоступна в потоках Worker.

process.config

Добавлен в: v0.7.7
  • <Object>

Свойство process.config возвращает Object, содержащий JavaScript-представление конфигурационных параметров, используемых для компиляции текущего исполняемого файла Node.js. Это то же самое, что файл config.gypi, который был создан при выполнении скрипта ./configure.

Пример возможного вывода:

{
  target_defaults:
   { cflags: [],
     default_configuration: 'Release',
     defines: [],
     include_dirs: [],
     libraries: [] },
  variables:
   {
     host_arch: 'x64',
     napi_build_version: 5,
     node_install_npm: 'true',
     node_prefix: '',
     node_shared_cares: 'false',
     node_shared_http_parser: 'false',
     node_shared_libuv: 'false',
     node_shared_zlib: 'false',
     node_use_dtrace: 'false',
     node_use_openssl: 'true',
     node_shared_openssl: 'false',
     strict_aliasing: 'true',
     target_arch: 'x64',
     v8_use_snapshot: 1
   }
}

Свойство process.config не является только для чтения, и существуют модули в экосистеме, которые известны расширяют, изменяют или полностью заменяют значение process.config.

process.connected

Добавлен в: v0.7.2
  • <boolean>

Если процесс Node.js запущен с каналом IPC (см. документацию Процесса дочернего процесса и Кластера), свойство process.connected вернёт true, пока канал IPC подключён и вернёт false после вызова process.disconnect().

После того, как process.connected false, отправлять сообщения по каналу IPC с использованием process.send() больше невозможно.

process.cpuUsage([previousValue])

Добавлен в: v6.1.0
  • previousValue <Object> Предыдущее возвращаемое значение вызова process.cpuUsage()
  • Возвращает: <Object>
    • user <integer>
    • system <integer>

Метод process.cpuUsage() возвращает использование процессорного времени пользователя и системы текущим процессом в объекте со свойствами user и system, значения которых представляют собой значения в микросекундах (миллионная доля секунды). Эти значения измеряют время, затраченное в коде пользователя и системы соответственно, и могут оказаться больше фактического времени, если несколько ядер процессора выполняют работу для этого процесса.

Результат предыдущего вызова process.cpuUsage() может быть передан в качестве аргумента функции для получения значения разности.

const startUsage = process.cpuUsage();
// { user: 38579, system: 6986 }

// spin the CPU for 500 milliseconds
const now = Date.now();
while (Date.now() - now < 500);

console.log(process.cpuUsage(startUsage));
// { user: 514883, system: 11226 }

process.cwd()

Добавлен в: v0.1.8
  • Возвращает: <string>

Метод process.cwd() возвращает текущую рабочую директорию процесса Node.js.

console.log(`Current directory: ${process.cwd()}`);

process.debugPort

Добавлен в: v0.7.2
  • <number>

Порт, используемый отладчиком Node.js при его включении.

process.debugPort = 5858;

process.disconnect()

Добавлен в: v0.7.2

Если процесс Node.js запущен с каналом IPC (см. документацию Процесса дочернего процесса и Кластера), метод process.disconnect() закроет канал IPC для родительского процесса, позволяя дочернему процессу завершиться корректно, когда не существует других подключений, которые поддерживают его работоспособность.

Эффект вызова process.disconnect() аналогичен вызову ChildProcess.disconnect() из родительского процесса.

Если процесс Node.js не был запущен с каналом IPC, process.disconnect() будет undefined.

process.dlopen(module, filename[, flags])

История
Версия Изменения
v9.0.0

Добавлена поддержка аргумента flags.

v0.1.16

Добавлен в: v0.1.16

  • module <Object>
  • filename <string>
  • flags <os.constants.dlopen> По умолчанию: os.constants.dlopen.RTLD_LAZY

Метод process.dlopen() позволяет динамически загружать общие объекты. Он в первую очередь используется require() для загрузки C++ Addons и не должен использоваться напрямую, за исключением особых случаев. Другими словами, require() следует предпочитать process.dlopen(), если нет особых причин.

Аргумент flags — целое число, которое позволяет указать поведение dlopen. Подробнее см. документацию os.constants.dlopen.

Если есть конкретные причины для использования process.dlopen() (например, для указания флагов dlopen), часто бывает полезно использовать require.resolve() для поиска пути к модулю.

Важный недостаток при вызове process.dlopen() заключается в том, что экземпляр module должен быть передан. Функции, экспортируемые C++ Addon, будут доступны через module.exports.

Ниже приведён пример загрузки C++ Addon, названного binding, который экспортирует функцию foo. Все символы будут загружены до возврата вызова, передав константу RTLD_NOW . В этом примере предполагается, что константа доступна.

const os = require('os');
process.dlopen(module, require.resolve('binding'),
               os.constants.dlopen.RTLD_NOW);
module.exports.foo();

process.emitWarning(warning[, options])

Добавлен в: v8.0.0
  • 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'.

// Emit a warning with a code and additional detail.
process.emitWarning('Something happened!', {
  code: 'MY_WARNING',
  detail: 'This is some additional information'
});
// Emits:
// (node:56338) [MY_WARNING] Warning: Something happened!
// This is some additional information

В этом примере объект Error генерируется внутри process.emitWarning() и передаётся обработчику события 'warning'.

process.on('warning', (warning) => {
  console.warn(warning.name);    // 'Warning'
  console.warn(warning.message); // 'Something happened!'
  console.warn(warning.code);    // 'MY_WARNING'
  console.warn(warning.stack);   // Stack trace
  console.warn(warning.detail);  // 'This is some additional information'
});

Если warning передаётся как объект Error, аргумент options игнорируется.

process.emitWarning(warning[, type[, code]][, ctor])

Добавлен в: v6.0.0
  • warning <string> | <Error> Предупреждение для вывода.
  • type <string> Когда warning является String, type — имя, используемое для типа выводимого предупреждения. По умолчанию: 'Warning'.
  • code <string> Уникальный идентификатор экземпляра предупреждения, который выводится.
  • ctor <Function> Когда warning является String, ctor — необязательная функция, используемая для ограничения генерируемого трассировки стека. По умолчанию: process.emitWarning.

Метод process.emitWarning() может быть использован для вывода пользовательских или специфичных для приложения предупреждений процесса. На них можно подписаться, добавив обработчик события 'warning' события.

// Emit a warning using a string.
process.emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!
// Emit a warning using a string and a type.
process.emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!
process.emitWarning('Something happened!', 'CustomWarning', 'WARN001');
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!

В каждом из предыдущих примеров объект Error генерируется внутри process.emitWarning() и передаётся обработчику события 'warning'.

process.on('warning', (warning) => {
  console.warn(warning.name);
  console.warn(warning.message);
  console.warn(warning.code);
  console.warn(warning.stack);
});

Если warning передаётся как объект Error, он будет передан обработчику события 'warning' без изменений (и необязательные аргументы type, code и ctor будут проигнорированы):

// Emit a warning using an Error object.
const myWarning = new Error('Something happened!');
// Use the Error name property to specify the type name
myWarning.name = 'CustomWarning';
myWarning.code = 'WARN001';

process.emitWarning(myWarning);
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!

Будет выброшено исключение TypeError, если warning не является строкой или объектом Error.

Хотя предупреждения процесса используют объекты Error, механизм предупреждений процесса не является заменой обычным механизмам обработки ошибок.

Следующая дополнительная обработка реализуется, если предупреждение type является 'DeprecationWarning':

  • Если используется флаг командной строки --throw-deprecation, предупреждение об устаревании выводится как исключение, а не как событие.
  • Если используется флаг командной строки --no-deprecation, предупреждение об устаревании подавляется.
  • Если используется флаг командной строки --trace-deprecation, предупреждение об устаревании выводится в stderr вместе с полным трассировкой стека.

Избегание дублирования предупреждений

В качестве наилучшей практики предупреждения должны выводиться только один раз на процесс. Для этого рекомендуется поместить emitWarning() за простой логический флаг, как показано в примере ниже:

function emitMyWarning() {
  if (!emitMyWarning.warned) {
    emitMyWarning.warned = true;
    process.emitWarning('Only warn once!');
  }
}
emitMyWarning();
// Emits: (node: 56339) Warning: Only warn once!
emitMyWarning();
// Emits nothing

process.env

История
Версия Изменения
v11.14.0

Потоки-рабочие будут теперь использовать копию process.env родительского потока по умолчанию, настраиваемое через опцию env конструктора Worker.

v10.0.0

Неявное преобразование значения переменной в строку устарело.

v0.1.27

Добавлен в: v0.1.27

  • <Object>

Свойство process.env возвращает объект, содержащий пользовательскую среду. См. environ(7).

Пример этого объекта выглядит так:

{
  TERM: 'xterm-256color',
  SHELL: '/usr/local/bin/bash',
  USER: 'maciej',
  PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/maciej',
  EDITOR: 'vim',
  SHLVL: '1',
  HOME: '/Users/maciej',
  LOGNAME: 'maciej',
  _: '/usr/local/bin/node'
}

Изменение этого объекта возможно, но такие изменения не будут отражены за пределами процесса Node.js или (если не запрошено явно) в других потоках Worker. Другими словами, следующий пример не сработает:

$ node -e 'process.env.foo = "bar"' && echo $foo

В то время как следующий сработает:

process.env.foo = 'bar';
console.log(process.env.foo);

Присваивание свойства process.env неявно преобразует значение в строку. Это поведение устарело. Будущие версии Node.js могут выбросить ошибку, когда значение не является строкой, числом или булевым значением.

process.env.test = null;
console.log(process.env.test);
// => 'null'
process.env.test = undefined;
console.log(process.env.test);
// => 'undefined'

Используйте delete для удаления свойства из process.env.

process.env.TEST = 1;
delete process.env.TEST;
console.log(process.env.TEST);
// => undefined

В операционных системах Windows переменные среды нечувствительны к регистру.

process.env.TEST = 1;
console.log(process.env.test);
// => 1

Если не указано при создании экземпляра Worker, каждый поток Worker имеет свою собственную копию process.env, основанную на process.env родительского потока или на том, что было указано как опция env конструктора Worker. Изменения в process.env не будут видны в потоках Worker, и только основной поток может вносить изменения, видимые операционной системе или нативным плагинам.

process.execArgv

Добавлен в: v0.7.7
  • <string[]>

Свойство process.execArgv возвращает набор опций командной строки, специфичных для Node.js, переданных при запуске процесса Node.js. Эти параметры не отображаются в массиве, возвращаемом свойством process.argv, и не включают исполняемый файл Node.js, имя скрипта или любые параметры после имени скрипта. Эти параметры полезны для запуска дочерних процессов с той же средой выполнения, что и родительский.

$ node --harmony script.js --version

Результатом является process.execArgv:

['--harmony']

И process.argv:

['/usr/local/bin/node', 'script.js', '--version']

process.execPath

Добавлен в: v0.1.100
  • <string>

Свойство process.execPath возвращает абсолютный путь к исполняемому файлу, который запустил процесс Node.js. Символические ссылки, если таковые имеются, разрешаются.

'/usr/local/bin/node'

process.exit([code])

Добавлен в: v0.1.13
  • code <integer> Код выхода. По умолчанию: 0.

Метод process.exit() инструктирует Node.js на синхронное завершение процесса со статусом выхода code. Если code опущено, выход использует код «успех» 0 или значение process.exitCode, если оно было установлено. Node.js не завершится, пока не будут вызваны все обработчики события 'exit'.

Для выхода с кодом «ошибка»:

process.exit(1);

Оболочка, которая выполнила Node.js, должна увидеть код выхода как 1.

Вызов process.exit() заставит процесс выйти как можно быстрее, даже если по-прежнему есть ожидающие асинхронные операции, которые не завершены полностью, включая операции ввода-вывода к process.stdout и process.stderr.

В большинстве ситуаций явно вызывать process.exit() не нужно. Процесс Node.js завершится сам по себе, если в цикле событий нет дополнительной работы. Свойство process.exitCode можно задать, чтобы сообщить процессу, какой код выхода использовать при естественном завершении процесса.

Например, следующий пример иллюстрирует неправильное использование метода process.exit(), которое может привести к обрезке и потере данных, напечатанных в stdout:

// This is an example of what *not* to do:
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exit(1);
}

Причина, по которой это проблематично, заключается в том, что записи в process.stdout в Node.js иногда асинхронные и могут происходить за несколько тактов цикла событий Node.js. Вызов process.exit(), однако, заставляет процесс выйти до того, как эти дополнительные записи в stdout смогут быть выполнены.

Вместо прямого вызова process.exit(), код должен установить process.exitCode и позволить процессу выйти естественным путём, избегая планирования дополнительной работы для цикла событий:

// How to properly set the exit code while letting
// the process exit gracefully.
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exitCode = 1;
}

Если необходимо завершить процесс Node.js из-за ошибки, выброс необработанной ошибки и разрешение процессу завершиться соответствующим образом безопаснее, чем вызов process.exit().

В потоках Worker эта функция останавливает текущий поток, а не текущий процесс.

process.exitCode

Добавлена в: v0.11.8
  • <целое>

Число, которое будет кодом завершения процесса, когда процесс завершается нормально или завершается с помощью process.exit() без указания кода.

Указание кода для process.exit(code) переопределит любое предыдущее значение process.exitCode.

process.getegid()

Добавлена в: v2.0.0

Метод process.getegid() возвращает числовое эффективное идентификатор группы процесса Node.js. (См. getegid(2).)

if (process.getegid) {
  console.log(`Current gid: ${process.getegid()}`);
}

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android).

process.geteuid()

Добавлена в: v2.0.0
  • Возвращает: <Объект>

Метод process.geteuid() возвращает числовое эффективное идентификатор пользователя процесса. (См. geteuid(2).)

if (process.geteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
}

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android).

process.getgid()

Добавлена в: v0.1.31
  • Возвращает: <Объект>

Метод process.getgid() возвращает числовой идентификатор группы процесса. (См. getgid(2).)

if (process.getgid) {
  console.log(`Current gid: ${process.getgid()}`);
}

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android).

process.getgroups()

Добавлена в: v0.9.4
  • Возвращает: <массив целых>

Метод process.getgroups() возвращает массив с дополнительными идентификаторами групп. POSIX не определяет, включен ли эффективный идентификатор группы, но Node.js гарантирует, что он всегда включен.

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android).

process.getuid()

Добавлена в: v0.1.28
  • Возвращает: <целое>

Метод process.getuid() возвращает числовой идентификатор пользователя процесса. (См. getuid(2).)

if (process.getuid) {
  console.log(`Current uid: ${process.getuid()}`);
}

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android).

process.hasUncaughtExceptionCaptureCallback()

Добавлена в: v9.3.0
  • Возвращает: <булево>

Указывает, установлена ли обработчик события исключений с помощью process.setUncaughtExceptionCaptureCallback().

process.hrtime([time])

Добавлена в: v0.7.6
  • time <массив целых> Результат предыдущего вызова process.hrtime()
  • Возвращает: <массив целых>

Это устаревшая версия process.hrtime.bigint() до того, как bigint был введен в JavaScript.

Метод process.hrtime() возвращает текущее время реального времени с высоким разрешением в кортеже [seconds, nanoseconds] Array, где nanoseconds — оставшаяся часть реального времени, которая не может быть представлена с точностью до секунды.

time — необязательный параметр, который должен быть результатом предыдущего вызова process.hrtime() для вычисления разницы с текущим временем. Если переданный параметр не является кортежем Array, будет выброшено исключение TypeError. Передача пользовательского массива вместо результата предыдущего вызова process.hrtime() приведет к неопределенному поведению.

Эти временные метки относительны к произвольному времени в прошлом и не связаны с временем суток, поэтому не подвержены дрейфу часов. Основное использование — для измерения производительности между интервалами:

const NS_PER_SEC = 1e9;
const time = process.hrtime();
// [ 1800216, 25 ]

setTimeout(() => {
  const diff = process.hrtime(time);
  // [ 1, 552 ]

  console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
  // Benchmark took 1000000552 nanoseconds
}, 1000);

process.hrtime.bigint()

Добавлена в: v10.7.0
  • Возвращает: <bigint>

Версия метода process.hrtime(), возвращающая текущее время реального времени с высоким разрешением в наносекундах как bigint.

В отличие от process.hrtime(), она не поддерживает дополнительный параметр time , так как разницу можно вычислить напрямую путем вычитания двух bigint.

const start = process.hrtime.bigint();
// 191051479007711n

setTimeout(() => {
  const end = process.hrtime.bigint();
  // 191052633396993n

  console.log(`Benchmark took ${end - start} nanoseconds`);
  // Benchmark took 1154389282 nanoseconds
}, 1000);

process.initgroups(user, extraGroup)

Добавлена в: v0.9.4
  • user <строка> | <число> Имя пользователя или числовой идентификатор.
  • extraGroup <строка> | <число> Имя группы или числовой идентификатор.

Метод process.initgroups() читает файл /etc/group и инициализирует список доступа к группам, используя все группы, членами которых является пользователь. Это привилегированная операция, которая требует, чтобы у процесса Node.js был доступ root или возможность CAP_SETGID.

Будьте осторожны при понижении привилегий:

console.log(process.getgroups());         // [ 0 ]
process.initgroups('nodeuser', 1000);     // switch user
console.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]
process.setgid(1000);                     // drop root gid
console.log(process.getgroups());         // [ 27, 30, 46, 1000 ]

Эта функция доступна только на платформах POSIX (т.е. не на Windows или Android). Эта функция недоступна в потоках Worker.

process.kill(pid[, signal])

Добавлена в: v0.0.6
  • pid <число> Идентификатор процесса
  • signal <строка> | <число> Сигнал для отправки, либо в виде строки, либо числа. По умолчанию: 'SIGTERM'.

Метод process.kill() отправляет signal процессу с идентификатором pid.

Имена сигналов — это строки, такие как 'SIGINT' или 'SIGHUP'. См. События сигналов и kill(2) для получения дополнительной информации.

Этот метод выбросит ошибку, если целевой pid не существует. В качестве специального случая сигнал 0 может использоваться для проверки существования процесса. На платформах Windows будет выброшена ошибка, если pid используется для уничтожения группы процессов.

Несмотря на название этой функции process.kill(), она на самом деле просто отправитель сигналов, подобно системному вызову kill . Отправленный сигнал может выполнить действие, отличное от завершения целевого процесса.

process.on('SIGHUP', () => {
  console.log('Got SIGHUP signal.');
});

setTimeout(() => {
  console.log('Exiting.');
  process.exit(0);
}, 100);

process.kill(process.pid, 'SIGHUP');

При получении сигнала SIGUSR1 процессом Node.js, Node.js запустит отладчик. См. События сигналов.

process.mainModule

Добавлена в: v0.1.17
  • <Объект>

Свойство process.mainModule предоставляет альтернативный способ получения require.main. Разница в том, что если основной модуль изменится во время выполнения, require.main может всё ещё ссылаться на исходный основной модуль в модулях, которые были загружены до изменения. В целом, можно считать, что эти два свойства ссылаются на один и тот же модуль.

Как и в случае с require.main, process.mainModule будет undefined если нет скрипта входа.

process.memoryUsage()

История
Версия Изменения
v12.17.0

Добавлен arrayBuffers в возвращаемый объект.

v7.2.0

Добавлен external в возвращаемый объект.

v0.1.16

Добавлена в: v0.1.16

  • Возвращает: <Объект>
    • rss <целое>
    • heapTotal <целое>
    • heapUsed <целое>
    • external <целое>
    • arrayBuffers <целое>

Метод process.memoryUsage() возвращает объект, описывающий использование памяти процессом Node.js, измеренное в байтах.

Например, код:

console.log(process.memoryUsage());

Сгенерирует:

{
  rss: 4935680,
  heapTotal: 1826816,
  heapUsed: 650472,
  external: 49879,
  arrayBuffers: 9386
}
  • heapTotal и heapUsed относятся к использованию памяти V8.
  • external относится к использованию памяти объектами C++ связанными с объектами JavaScript, управляемыми V8.
  • rss, Размер занятой памяти, — это количество места, занимаемого в основной памяти (что является подмножеством всей выделенной памяти) для процесса, включая все объекты C++ и JavaScript, а также код.
  • arrayBuffers относится к памяти, выделенной для ArrayBuffer и SharedArrayBuffer объектов, включая все Node.js Buffer. Это также включено в значение external. Когда Node.js используется как встроенная библиотека, это значение может быть 0, поскольку выделения для ArrayBuffer могут не отслеживаться в этом случае.

При использовании потоков Worker, rss будет значением, применимым для всего процесса, в то время как другие поля будут относиться только к текущему потоку.

process.nextTick(callback[, ...args])

История
Версия Изменения
v1.8.1

Теперь поддерживаются дополнительные аргументы после callback.

v0.1.26

Добавлен в: v0.1.26

  • callback <Функция>
  • ...args <любой> Дополнительные аргументы для передачи при вызове callback

process.nextTick() добавляет callback в очередь "next tick". Эта очередь полностью обрабатывается после завершения текущей операции в стеке JavaScript и перед тем, как цикл событий сможет продолжить работу. Возможна ситуация создания бесконечного цикла, если process.nextTick() будет вызываться рекурсивно. Для получения дополнительной информации см. руководство по циклу событий.

console.log('start');
process.nextTick(() => {
  console.log('nextTick callback');
});
console.log('scheduled');
// Output:
// start
// scheduled
// nextTick callback

Это важно при разработке API, чтобы дать пользователям возможность назначать обработчики событий после создания объекта, но до выполнения операций ввода-вывода:

function MyThing(options) {
  this.setupOptions(options);

  process.nextTick(() => {
    this.startDoingStuff();
  });
}

const thing = new MyThing();
thing.getReadyForStuff();

// thing.startDoingStuff() gets called now, not before.

Очень важно, чтобы API были либо 100% синхронными, либо 100% асинхронными. Рассмотрим этот пример:

// WARNING!  DO NOT USE!  BAD UNSAFE HAZARD!
function maybeSync(arg, cb) {
  if (arg) {
    cb();
    return;
  }

  fs.stat('file', cb);
}

Этот API опасен, потому что в следующем случае:

const maybeTrue = Math.random() > 0.5;

maybeSync(maybeTrue, () => {
  foo();
});

bar();

Непонятно, какой метод foo() или bar() будет вызван первым.

Следующий подход намного лучше:

function definitelyAsync(arg, cb) {
  if (arg) {
    process.nextTick(cb);
    return;
  }

  fs.stat('file', cb);
}

process.noDeprecation

Добавлен в: v0.8.0
  • <логический>

Свойство process.noDeprecation указывает, установлена ли метка --no-deprecation в текущем процессе Node.js. Для получения дополнительной информации об этом флаге см. документацию для 'warning' события и метода emitWarning().

process.pid

Добавлен в: v0.1.15
  • <целое число>

Свойство process.pid возвращает PID процесса.

console.log(`This process is pid ${process.pid}`);

process.platform

Добавлен в: v0.1.16
  • <строка>

Свойство process.platform возвращает строку, определяющую платформу операционной системы, на которой работает процесс Node.js.

Возможные значения на данный момент:

  • 'aix'
  • 'darwin'
  • 'freebsd'
  • 'linux'
  • 'openbsd'
  • 'sunos'
  • 'win32'
console.log(`This platform is ${process.platform}`);

Значение 'android' также может быть возвращено, если Node.js построен на операционной системе Android. Однако поддержка Android в Node.js экспериментальная.

process.ppid

Добавлен в: v9.2.0, v8.10.0, v6.13.0
  • <целое число>

Свойство process.ppid возвращает PID родительского процесса.

console.log(`The parent process is pid ${process.ppid}`);

process.release

История
Версия Изменения
v4.2.0

Теперь поддерживается свойство lts.

v3.0.0

Добавлен в: v3.0.0

  • <Объект>

Свойство process.release возвращает Object содержащий метаданные, связанные с текущей версией, включая URL для исходного tarball и tarball только с заголовками.

process.release содержит следующие свойства:

  • name <строка> Значение, которое всегда будет 'node' для Node.js. Для устаревших выпусков io.js оно будет 'io.js'.
  • sourceUrl <строка> абсолютный URL, указывающий на файл .tar.gz, содержащий исходный код текущей версии.
  • headersUrl<строка> абсолютный URL, указывающий на файл .tar.gz, содержащий только исходные заголовочные файлы текущей версии. Этот файл значительно меньше полного исходного файла и может использоваться для компиляции нативных модулей Node.js.
  • libUrl <строка> абсолютный URL, указывающий на файл node.lib, соответствующий архитектуре и версии текущей версии. Этот файл используется для компиляции нативных модулей Node.js. Это свойство присутствует только в сборках Node.js для Windows и отсутствует на всех других платформах.
  • lts <строка> строка, определяющая метку LTS для этого выпуска. Это свойство существует только для LTS-выпусков и имеет значение undefined для всех других типов релизов, включая текущие. Допустимые значения включают кодовые названия LTS-выпусков (включая те, которые больше не поддерживаются). Неполный пример таких кодовых названий:
    • 'Dubnium' для LTS-линейки 10.x, начиная с 10.13.0.
    • 'Erbium' для LTS-линейки 12.x, начиная с 12.13.0. Для других кодовых названий LTS-выпусков см. Архив изменений Node.js
{
  name: 'node',
  lts: 'Erbium',
  sourceUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1.tar.gz',
  headersUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1-headers.tar.gz',
  libUrl: 'https://nodejs.org/download/release/v12.18.1/win-x64/node.lib'
}

В пользовательских сборках из нерелизных версий исходного дерева может быть представлено только свойство name. Не следует полагаться на существование дополнительных свойств.

process.report

История
Версия Изменения
v12.17.0

Этот API больше не экспериментальный.

v11.8.0

Добавлен в: v11.8.0

  • <Объект>

process.report — это объект, методы которого используются для генерации диагностических отчетов для текущего процесса. Дополнительная документация доступна в документации по отчетам.

process.report.compact

Добавлен в: v12.17.0
  • <логический>

Запись отчетов в компактном формате, JSON на одной строке, более удобном для систем обработки логов, чем стандартный многострочный формат, предназначенный для восприятия человеком.

console.log(`Reports are compact? ${process.report.compact}`);

process.report.directory

История
Версия Изменения
v12.17.0

Этот API больше не экспериментальный.

v11.12.0

Добавлен в: v11.12.0

  • <строка>

Директория, в которой записывается отчет. Значение по умолчанию — пустая строка, означающая, что отчеты записываются в текущий рабочий каталог процесса Node.js.

console.log(`Report directory is ${process.report.directory}`);

process.report.filename

История
Версия Изменения
v12.17.0

Этот API больше не экспериментальный.

v11.12.0

Добавлен в: v11.12.0

  • <строка>

Имя файла, в который записывается отчет. Если установлено значение пустая строка, имя файла вывода будет состоять из метки времени, PID и порядкового номера. Значение по умолчанию — пустая строка.

console.log(`Report filename is ${process.report.filename}`);

process.report.getReport([err])

История
Версия Изменения
v12.17.0

Этот API больше не экспериментальный.

v11.8.0

Добавлен в: v11.8.0

  • err <Error> Пользовательское исключение, используемое для отслеживания стека JavaScript.
  • Возвращает: <Объект>

Возвращает объект JavaScript, представляющий собой диагностический отчёт о ходе выполнения процесса. Трассировка стека JavaScript в отчёте взята из err, если она доступна.

const data = process.report.getReport();
console.log(data.header.nodeJsVersion);

// Similar to process.report.writeReport()
const fs = require('fs');
fs.writeFileSync(util.inspect(data), 'my-report.log', 'utf8');

Дополнительная документация доступна в документации отчёта.

process.report.reportOnFatalError

Добавлен в: v11.12.0
Устойчивость: 1 - Экспериментальный
  • <логическое>

Если true, диагностический отчёт генерируется при возникновении критических ошибок, таких как ошибки недостатка памяти или неудачные утверждения C++.

console.log(`Report on fatal error: ${process.report.reportOnFatalError}`);

process.report.reportOnSignal

История
Версия Изменения
v12.17.0

Данный API больше не является экспериментальным.

v11.12.0

Добавлен в: v11.12.0

  • <логическое>

Если true, диагностический отчёт генерируется, когда процесс получает сигнал, указанный в process.report.signal.

console.log(`Report on signal: ${process.report.reportOnSignal}`);

process.report.reportOnUncaughtException

История
Версия Изменения
v12.17.0

Данный API больше не является экспериментальным.

v11.12.0

Добавлен в: v11.12.0

  • <логическое>

Если true, диагностический отчёт генерируется при возникновении необработанного исключения.

console.log(`Report on exception: ${process.report.reportOnUncaughtException}`);

process.report.signal

История
Версия Изменения
v12.17.0

Данный API больше не является экспериментальным.

v11.12.0

Добавлен в: v11.12.0

  • <строка>

Сигнал, используемый для запуска создания диагностического отчёта. По умолчанию 'SIGUSR2'.

console.log(`Report signal: ${process.report.signal}`);

process.report.writeReport([filename][, err])

История
Версия Изменения
v12.17.0

Данный API больше не является экспериментальным.

v11.8.0

Добавлен в: v11.8.0

  • filename <строка> Имя файла, в который записывается отчёт. Это должен быть относительный путь, который будет добавлен к каталогу, указанному в process.report.directory, или к текущей рабочей директории процесса Node.js, если не указано иное.

  • err <Ошибка> Пользовательское исключение, используемое для отслеживания стека JavaScript.

  • Возвращает: <строка> Возвращает имя сгенерированного отчёта.

Записывает диагностический отчёт в файл. Если filename не указан, имя файла по умолчанию включает дату, время, PID и порядковый номер. Трассировка стека JavaScript в отчёте взята из err, если она доступна.

process.report.writeReport();

Дополнительная документация доступна в документации отчёта.

process.resourceUsage()

Добавлен в: v12.6.0
  • Возвращает: <Объект> использование ресурсов текущего процесса. Все эти значения получены из вызова uv_getrusage, который возвращает uv_rusage_t структуру.
    • userCPUTime <целое> соответствует ru_utime, вычисленному в микросекундах. Это то же значение, что и в process.cpuUsage().user.
    • systemCPUTime <целое> соответствует ru_stime, вычисленному в микросекундах. Это то же значение, что и в process.cpuUsage().system.
    • maxRSS <целое> соответствует ru_maxrss, которое является максимальным размером резидентного набора, используемым в килобайтах.
    • sharedMemorySize <целое> соответствует ru_ixrss, но не поддерживается ни одной платформой.
    • unsharedDataSize <целое> соответствует ru_idrss, но не поддерживается ни одной платформой.
    • unsharedStackSize <целое> соответствует ru_isrss, но не поддерживается ни одной платформой.
    • minorPageFault <целое> соответствует ru_minflt, которое является количеством мелких страниц-ошибок для процесса, см. эту статью для получения дополнительных сведений.
    • majorPageFault <целое> соответствует ru_majflt, которое является количеством крупных страниц-ошибок для процесса, см. эту статью для получения дополнительных сведений. Это поле не поддерживается в Windows.
    • swappedOut <целое> соответствует ru_nswap, но не поддерживается ни одной платформой.
    • fsRead <целое> соответствует ru_inblock, которое является количеством раз, когда файловой системе пришлось выполнить ввод.
    • fsWrite <целое> соответствует ru_oublock, которое является количеством раз, когда файловой системе пришлось выполнить вывод.
    • ipcSent <целое> соответствует ru_msgsnd, но не поддерживается ни одной платформой.
    • ipcReceived <целое> соответствует ru_msgrcv, но не поддерживается ни одной платформой.
    • signalsCount <целое> соответствует ru_nsignals, но не поддерживается ни одной платформой.
    • voluntaryContextSwitches <целое> соответствует ru_nvcsw, которое является количеством переключений контекста процессора, произошедших из-за того, что процесс добровольно отказался от процессора до завершения его временного интервала (обычно для ожидания доступности ресурса). Это поле не поддерживается в Windows.
    • involuntaryContextSwitches <целое> соответствует ru_nivcsw, которое является количеством переключений контекста процессора, произошедших из-за того, что процесс с более высоким приоритетом стал готов к выполнению или потому, что текущий процесс превысил свой временной интервал. Это поле не поддерживается в Windows.
console.log(process.resourceUsage());
/*
  Will output:
  {
    userCPUTime: 82872,
    systemCPUTime: 4143,
    maxRSS: 33164,
    sharedMemorySize: 0,
    unsharedDataSize: 0,
    unsharedStackSize: 0,
    minorPageFault: 2469,
    majorPageFault: 0,
    swappedOut: 0,
    fsRead: 0,
    fsWrite: 8,
    ipcSent: 0,
    ipcReceived: 0,
    signalsCount: 0,
    voluntaryContextSwitches: 79,
    involuntaryContextSwitches: 1
  }
*/

process.send(message[, sendHandle[, options]][, callback])

Добавлен в: v0.5.9
  • message <Объект>
  • sendHandle <net.Сервер> | <net.Сокет>
  • options <Объект> используется для параметризации отправки определённых типов дескрипторов. options поддерживает следующие свойства:
    • keepOpen <логическое> Значение, которое может использоваться при передаче экземпляров net.Socket. При true, сокет остается открытым в процессе отправки. По умолчанию: false.
  • callback <Функция>
  • Возвращает: <логическое>

Если Node.js запущен с каналом IPC, метод process.send() можно использовать для отправки сообщений в родительский процесс. Сообщения будут получены как событие 'message' в родительском объекте ChildProcess.

Если Node.js не был запущен с каналом IPC, process.send будет undefined.

Сообщение проходит сериализацию и парсинг. Результирующее сообщение может отличаться от первоначально отправленного.

process.setegid(id)

Added in: v2.0.0
  • id <string> | <number> Название или идентификатор группы

Метод process.setegid() устанавливает эффективную идентичность группы процесса. (См. setegid(2).) Аргумент id может быть передан как числовой идентификатор или строковое имя группы. Если указано имя группы, метод блокируется до получения соответствующего числового идентификатора.

if (process.getegid && process.setegid) {
  console.log(`Current gid: ${process.getegid()}`);
  try {
    process.setegid(501);
    console.log(`New gid: ${process.getegid()}`);
  } catch (err) {
    console.log(`Failed to set gid: ${err}`);
  }
}

Эта функция доступна только на платформах POSIX (то есть не на Windows и не на Android). Эта функция недоступна в потоках Worker.

process.seteuid(id)

Added in: v2.0.0
  • id <string> | <number> Имя или идентификатор пользователя

Метод process.seteuid() устанавливает эффективную идентичность пользователя процесса. (См. seteuid(2).) Аргумент id может быть передан как числовой идентификатор или строковое имя пользователя. Если указано имя пользователя, метод блокируется до получения соответствующего числового идентификатора.

if (process.geteuid && process.seteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
  try {
    process.seteuid(501);
    console.log(`New uid: ${process.geteuid()}`);
  } catch (err) {
    console.log(`Failed to set uid: ${err}`);
  }
}

Эта функция доступна только на платформах POSIX (то есть не на Windows и не на Android). Эта функция недоступна в потоках Worker.

process.setgid(id)

Added in: v0.1.31
  • id <string> | <number> Имя или идентификатор группы

Метод process.setgid() устанавливает идентичность группы процесса. (См. setgid(2).) Аргумент id может быть передан как числовой идентификатор или строковое имя группы. Если указано имя группы, метод блокируется до получения соответствующего числового идентификатора.

if (process.getgid && process.setgid) {
  console.log(`Current gid: ${process.getgid()}`);
  try {
    process.setgid(501);
    console.log(`New gid: ${process.getgid()}`);
  } catch (err) {
    console.log(`Failed to set gid: ${err}`);
  }
}

Эта функция доступна только на платформах POSIX (то есть не на Windows и не на Android). Эта функция недоступна в потоках Worker.

process.setgroups(groups)

Added in: v0.9.4
  • groups <integer[]>

Метод process.setgroups() устанавливает дополнительные идентификаторы групп для процесса Node.js. Это привилегированная операция, требующая, чтобы у процесса Node.js была root или CAP_SETGID возможность.

Массив groups может содержать числовые идентификаторы групп, имена групп или оба.

Эта функция доступна только на платформах POSIX (то есть не на Windows и не на Android). Эта функция недоступна в потоках Worker.

process.setuid(id)

Added in: v0.1.28
  • id <integer> | <string>

Метод process.setuid(id) устанавливает идентичность пользователя процесса. (См. setuid(2).) Аргумент id может быть передан как числовой идентификатор или строковое имя пользователя. Если указано имя пользователя, метод блокируется до получения соответствующего числового идентификатора.

if (process.getuid && process.setuid) {
  console.log(`Current uid: ${process.getuid()}`);
  try {
    process.setuid(501);
    console.log(`New uid: ${process.getuid()}`);
  } catch (err) {
    console.log(`Failed to set uid: ${err}`);
  }
}

Эта функция доступна только на платформах POSIX (то есть не на Windows и не на Android). Эта функция недоступна в потоках Worker.

process.setUncaughtExceptionCaptureCallback(fn)

Added in: v9.3.0
  • fn <Function> | <null>

Функция process.setUncaughtExceptionCaptureCallback() устанавливает функцию, которая будет вызвана при возникновении необработанного исключения, получив само значение исключения в качестве первого аргумента.

Если такая функция установлена, событие 'uncaughtException' не будет излучаться. Если --abort-on-uncaught-exception был передан из командной строки или установлен через v8.setFlagsFromString(), процесс не будет прерван.

Для отмены функции захвата можно использовать process.setUncaughtExceptionCaptureCallback(null). Вызов этого метода с аргументом, отличным от null, в то время как другая функция захвата установлена, вызовет ошибку.

Использование этой функции исключает использование устаревшего встроенного модуля domain.

process.stderr

  • <Stream>

Свойство process.stderr возвращает поток, подключенный к стандартному ошибочному выводу (stderr) (дескриптор файла 2). Это net.Socket (который является потоком Duplex), если дескриптор файла 2 относится к файлу, в этом случае это поток Writable.

process.stderr отличается от других потоков Node.js важными особенностями. См. примечание о вводе-выводе процесса для получения дополнительной информации.

process.stderr.fd

  • <number>

Это свойство ссылается на значение базового дескриптора файла process.stderr. Значение фиксировано на 2. В потоках Worker это поле не существует.

process.stdin

  • <Stream>

Свойство process.stdin возвращает поток, подключенный к стандартному вводу (stdin) (дескриптор файла 0). Это net.Socket (который является потоком Duplex), если дескриптор файла 0 относится к файлу, в этом случае это поток Readable.

Подробности о чтении из stdin см. в readable.read().

В качестве потока Duplex process.stdin также может быть использован в «старом» режиме, совместимом со скриптами, написанными для Node.js до версии v0.10. Для получения дополнительной информации см. Совместимость потоков.

В режиме «старых» потоков поток stdin приостановлен по умолчанию, поэтому необходимо вызвать process.stdin.resume() для чтения из него. Также обратите внимание, что вызов самого process.stdin.resume() переключит поток в «старый» режим.

process.stdin.fd

  • <number>

Это свойство ссылается на значение базового дескриптора файла process.stdin. Значение фиксировано на 0. В потоках Worker это поле не существует.

process.stdout

  • <Stream>

Свойство process.stdout возвращает поток, подключенный к стандартному выводу (stdout) (дескриптор файла 1). Это net.Socket (который является потоком Duplex), если дескриптор файла 1 относится к файлу, в этом случае это поток Writable.

Например, чтобы скопировать process.stdin в process.stdout:

process.stdin.pipe(process.stdout);

process.stdout отличается от других потоков Node.js важными особенностями. См. примечание о вводе-выводе процесса для получения дополнительной информации.

process.stdout.fd

  • <number>

Это свойство ссылается на значение базового дескриптора файла process.stdout. Значение фиксировано на 1. В потоках Worker это поле не существует.

Примечание о вводе-выводе процесса

process.stdout и process.stderr отличаются от других потоков Node.js важными особенностями:

  1. Они используются внутри console.log() и console.error(), соответственно.
  2. Записи могут быть синхронными в зависимости от того, к чему подключен поток, и от того, является ли система Windows или POSIX:
    • Файлы: синхронно на Windows и POSIX
    • TTY (терминалы): асинхронно на Windows, синхронно на POSIX
    • Трубы (и сокеты): синхронно на Windows, асинхронно на POSIX

Эти особенности частично обусловлены историческими причинами, так как изменение их привело бы к несовместимости с предыдущими версиями, но они также ожидаются некоторыми пользователями.

Синхронные записи избегают проблем, таких как неожиданное переплетение вывода с использованием console.log() или console.error(), или отсутствие записи, если process.exit() вызвана до завершения асинхронной записи. См. process.exit() для получения дополнительной информации.

Предупреждение: Синхронные записи блокируют цикл событий до завершения записи. В случае вывода в файл это может произойти практически мгновенно, но при высокой нагрузке системы, каналах, которые не считываются на принимающей стороне, или при медленных терминалах или файловых системах, цикл событий может блокироваться достаточно часто и долго, что негативно сказывается на производительности. Это может не быть проблемой при записи в интерактивную сессию терминала, но следует учитывать это при выполнении производственной регистрации в потоках вывода процесса.

Чтобы проверить, подключен ли поток к контексту TTY, проверьте свойство isTTY.

Например:

$ node -p "Boolean(process.stdin.isTTY)"
true
$ echo "foo" | node -p "Boolean(process.stdin.isTTY)"
false
$ node -p "Boolean(process.stdout.isTTY)"
true
$ node -p "Boolean(process.stdout.isTTY)" | cat
false

Дополнительную информацию см. в документации по TTY.

process.throwDeprecation

Добавлен в: v0.9.12
  • <boolean>

Начальное значение process.throwDeprecation указывает, установлен ли флаг --throw-deprecation в текущем процессе Node.js. process.throwDeprecation является изменяемым, поэтому последствия предупреждений об устаревании в ошибках могут быть изменены во время выполнения. Дополнительную информацию см. в документации по событию 'warning' и методу emitWarning().

$ node --throw-deprecation -p "process.throwDeprecation"
true
$ node -p "process.throwDeprecation"
undefined
$ node
> process.emitWarning('test', 'DeprecationWarning');
undefined
> (node:26598) DeprecationWarning: test
> process.throwDeprecation = true;
true
> process.emitWarning('test', 'DeprecationWarning');
Thrown:
[DeprecationWarning: test] { name: 'DeprecationWarning' }

process.title

Добавлен в: v0.1.104
  • <string>

Свойство 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

Добавлен в: v0.8.0
  • <boolean>

Свойство process.traceDeprecation указывает, установлен ли флаг --trace-deprecation в текущем процессе Node.js. Дополнительную информацию об этом флаге см. в документации по событию 'warning' и методу emitWarning().

process.umask()

История
Версия Изменения
v12.19.0, v14.0.0

Вызов process.umask() без аргументов устарел.

v0.1.19

Добавлен в: v0.1.19

Стабильность: 0 - Устарело. Вызов process.umask() без аргумента приводит к записи маски umask всего процесса дважды. Это создает гонку между потоками и представляет собой потенциальную уязвимость для системы безопасности. Нет безопасного кросс-платформенного альтернативного API.

process.umask() возвращает маску создания режима файла для процесса Node.js. Дочерние процессы наследуют маску от родительского процесса.

process.umask(mask)

Добавлен в: v0.1.19
  • mask <string> | <integer>

process.umask(mask) устанавливает маску создания режима файла для процесса Node.js. Дочерние процессы наследуют маску от родительского процесса. Возвращает предыдущую маску.

const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);

В потоках Worker process.umask(mask) вызовет исключение.

process.uptime()

Добавлен в: v0.5.0
  • Возвращает: <number>

Метод process.uptime() возвращает количество секунд, в течение которых текущий процесс Node.js работает.

Значение возврата включает дробные секунды. Используйте Math.floor() для получения целых секунд.

process.version

Добавлен в: v0.1.3
  • <string>

Свойство process.version содержит строку версии Node.js.

console.log(`Version: ${process.version}`);
// Version: v14.8.0

Чтобы получить строку версии без префикса v, используйте process.versions.node.

process.versions

История
Версия Изменения
v9.0.0

Свойство v8 теперь включает специфичный для Node.js суффикс.

v4.2.0

Свойство icu теперь поддерживается.

v0.2.0

Добавлен в: v0.2.0

  • <Object>

Свойство process.versions возвращает объект, содержащий строки версий Node.js и его зависимостей. process.versions.modules указывает текущую версию ABI, которая увеличивается при каждом изменении API C++. Node.js откажется загружать модули, скомпилированные с использованием другой версии ABI модулей.

console.log(process.versions);

Сгенерирует объект, подобный:

{ node: '11.13.0',
  v8: '7.0.276.38-node.18',
  uv: '1.27.0',
  zlib: '1.2.11',
  brotli: '1.0.7',
  ares: '1.15.0',
  modules: '67',
  nghttp2: '1.34.0',
  napi: '4',
  llhttp: '1.1.1',
  http_parser: '2.8.0',
  openssl: '1.1.1b',
  cldr: '34.0',
  icu: '63.1',
  tz: '2018e',
  unicode: '11.0' }

Коды выхода

Node.js обычно выходит с кодом состояния 0, когда больше нет ожидающих асинхронных операций. В других случаях используются следующие коды состояния:

  • 1 Необработанное критическое исключение: Произошло необработанное исключение, и оно не было обработано областью или обработчиком события '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 были установлены, но выбранный номер порта был недопустимым или недоступным.
  • >128 Выход по сигналу: Если Node.js получает фатальный сигнал, такой как SIGKILL или SIGHUP, его код выхода будет 128 плюс значение кода сигнала. Это стандартная практика POSIX, поскольку коды выхода определены как 7-битовые целые числа, а выход по сигналу устанавливает старший бит, а затем содержит значение кода сигнала. Например, у сигнала SIGABRT значение 6, поэтому ожидаемый код выхода будет 128 + 6, или 134.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v12.x/docs/api/process.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API