Spec-Zone.ru › Node.js 22 LTS

Process

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

Объект process предоставляет информацию о текущем процессе Node.js и управление им.

Модули JavaScript
import process from 'node:process';
CommonJS
const process = require('node:process');

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

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

Событие: 'beforeExit'

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

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

Функция обратного вызова слушателя вызывается со значением process.exitCode, переданным в качестве единственного аргумента.

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

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

Модули JavaScript
import process from 'node:process';

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
CommonJS
const process = require('node:process');

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 (см. документацию по Child Process и Cluster), событие 'disconnect' будет вызвано при закрытии канала IPC.

Событие: 'exit'

Добавлено в: v0.1.7
  • code <integer>

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

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

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

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

Модули JavaScript
import process from 'node:process';

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

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

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

Модули JavaScript
import process from 'node:process';

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

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

Событие: 'message'

Добавлено в: v0.5.10
  • 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(), принимается дочерним процессом.

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

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

Событие: 'multipleResolves'

Добавлено в: v10.12.0Устарело начиная с: v17.6.0, v16.15.0
Стабильность: 0 - Устарело
  • type <string> Тип разрешения. Одно из значений: 'resolve' или 'reject'.
  • promise <Promise> Промис, который был разрешен или отклонен более одного раза.
  • value <any> Значение, с которым промис был разрешен или отклонен после первоначального разрешения.

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

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

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

Из-за ненадежности этого события в таких случаях, как пример с Promise.race() выше, оно было объявлено устаревшим.

Модули JavaScript
import process from 'node:process';

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
CommonJS
const process = require('node:process');

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> Промис с запоздалой обработкой.

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

Объект Promise ранее уже был передан в событии 'unhandledRejection', но в ходе дальнейшей обработки получил обработчик отклонения.

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

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

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

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

Модули JavaScript
import process from 'node:process';

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

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

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

Событие: 'workerMessage'

Добавлено в: v22.5.0
  • value <any> Значение, переданное с помощью postMessageToThread().
  • source <number> Идентификатор передающего потока воркера или 0 для главного потока.

Событие 'workerMessage' возникает для любого входящего сообщения, отправленного другой стороной с использованием postMessageToThread().

Событие: 'uncaughtException'

История изменений
Версия Изменения
v12.0.0, v10.17.0

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

v0.1.18

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

  • 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.

Модули JavaScript
import process from 'node:process';
import fs from 'node:fs';

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

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

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');
CommonJS
const process = require('node:process');
const fs = require('node:fs');

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

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'

Добавлено в: v13.7.0, v12.17.0
  • err <Error> Неперехваченное исключение.
  • origin <string> Указывает, возникло ли исключение из-за необработанного отклонения или синхронных ошибок. Может быть либо 'uncaughtException', либо 'unhandledRejection'. Последнее используется, когда исключение возникает в асинхронном контексте на основе Promise (или если Promise отклонен) и установлен флаг --unhandled-rejections со значением strict или throw (по умолчанию), при этом отклонение не обрабатывается, либо когда отклонение происходит на этапе статической загрузки модуля ES точки входа командной строки.

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

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

Модули JavaScript
import process from 'node:process';

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

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
// Still crashes Node.js
CommonJS
const process = require('node:process');

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' полезно для обнаружения и отслеживания промисов, которые были отклонены, но чьи отклонения еще не были обработаны.

Модули JavaScript
import process from 'node:process';

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()`
CommonJS
const process = require('node:process');

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()`

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

Модули JavaScript
import process from 'node:process';

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
CommonJS
const process = require('node:process');

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'. Чтобы устранить такие сбои, к resource.loaded можно прикрепить пустой обработчик .catch(() => { }), что предотвратит генерацию события 'unhandledRejection'.

Если событие 'unhandledRejection' сгенерировано, но не обработано, оно будет вызвано как неперехваченное исключение. Это, наряду с другим поведением событий 'unhandledRejection', можно изменить с помощью флага --unhandled-rejections.

Событие: 'warning'

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

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

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

Модули JavaScript
import process from 'node:process';

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
});
CommonJS
const process = require('node:process');

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

Следующий пример иллюстрирует предупреждение, которое выводится в 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 copy

В отличие от этого, следующий пример отключает вывод предупреждений по умолчанию и добавляет пользовательский обработчик для события '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! copy

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

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

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

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

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

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

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

Имена предупреждений Node.js

Для типов предупреждений, генерируемых Node.js (определяемых свойством name), нет строгих правил. Новые типы предупреждений могут быть добавлены в любое время. Несколько наиболее распространенных типов предупреждений включают:

  • 'DeprecationWarning' — указывает на использование устаревшего API или функциональности Node.js. Такие предупреждения должны содержать свойство 'code', определяющее код устаревания.
  • 'ExperimentalWarning' — указывает на использование экспериментального API или функциональности Node.js. Такие возможности следует использовать с осторожностью, поскольку они могут измениться в любое время и не подпадают под действие тех же строгих правил семантического версионирования и долгосрочной поддержки, что и поддерживаемые функции.
  • 'MaxListenersExceededWarning' — указывает на то, что для определенного события было зарегистрировано слишком много слушателей на EventEmitter или EventTarget. Часто это признак утечки памяти.
  • 'TimeoutOverflowWarning' — указывает на то, что в функции setTimeout() или setInterval() было передано числовое значение, которое не помещается в 32-битное знаковое целое число.
  • 'UnsupportedWarning' — указывает на использование неподдерживаемой опции или функциональности, которая будет проигнорирована, а не обработана как ошибка. Одним из примеров является использование сообщения о статусе ответа HTTP при работе с API совместимости с HTTP/2.

Событие: 'worker'

Добавлено в: v16.2.0, v14.18.0
  • worker <Worker> Созданный <Worker>.

Событие 'worker' генерируется после создания нового потока <Worker>.

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

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

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

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

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

Модули JavaScript
import process from 'node:process';

// 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);
CommonJS
const process = require('node:process');

// 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). Для него можно установить слушатель, однако примерно через 10 секунд Node.js будет безусловно завершен системой Windows. На платформах, отличных от 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-слушатели. Это может привести к зависанию процесса.
  • 0 может быть отправлен для проверки существования процесса; он не оказывает никакого эффекта, если процесс существует, но вызовет ошибку, если процесс не существует.

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

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

process.abort()

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

Метод process.abort() приводит к немедленному завершению процесса Node.js и генерации файла core dump.

Эта возможность недоступна в потоках 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, будут содержать символы подчеркивания вместо неначальных дефисов:

Модули JavaScript
import { allowedNodeEnvironmentFlags } from 'node:process';

allowedNodeEnvironmentFlags.forEach((flag) => {
  // -r
  // --inspect-brk
  // --abort_on_uncaught_exception
  // ...
});
CommonJS
const { allowedNodeEnvironmentFlags } = require('node: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', 'loong64', 'mips', 'mipsel', 'ppc', 'ppc64', 'riscv64', 's390', 's390x' и 'x64'.

Модули JavaScript
import { arch } from 'node:process';

console.log(`This processor architecture is ${arch}`);
CommonJS
const { arch } = require('node:process');

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

process.argv

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

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

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

Модули JavaScript
import { argv } from 'node:process';

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

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

Запуск процесса Node.js с помощью команды:

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

Приведет к выводу:

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

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' copy

process.availableMemory()

История изменений
Версия Изменения
v22.16.0

Индекс стабильности для этой функции изменен с Experimental на Stable.

v22.0.0

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

  • Тип: <number>

Возвращает объем свободной памяти, которая все еще доступна процессу (в байтах).

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

process.channel

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

Объект больше случайно не предоставляет доступ к нативным привязкам C++.

v7.1.0

Добавлено в: v7.1.0

  • Тип: <Object>

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

process.channel.ref()

Добавлено в: v7.1.0

Этот метод заставляет IPC-канал поддерживать цикл событий процесса в работающем состоянии, если ранее был вызван метод .unref().

Как правило, это контролируется количеством слушателей событий 'disconnect' и 'message' на объекте process. Однако данный метод можно использовать для явного указания желаемого поведения.

process.channel.unref()

Добавлено в: v7.1.0

Этот метод указывает IPC-каналу не удерживать цикл событий процесса в работающем состоянии и позволяет ему завершиться, даже пока канал открыт.

Как правило, это контролируется количеством слушателей событий 'disconnect' и 'message' на объекте process. Однако данный метод можно использовать для явного указания желаемого поведения.

process.chdir(directory)

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

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

Модули JavaScript
import { chdir, cwd } from 'node:process';

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

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

Эта возможность недоступна в потоках Worker.

process.config

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

Объект process.config теперь заморожен.

v16.0.0

Изменение process.config устарело.

v0.7.7

Добавлено в: 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_openssl: 'true',
     node_shared_openssl: 'false',
     target_arch: 'x64',
     v8_use_snapshot: 1
   }
} copy

process.connected

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

Если процесс Node.js порожден с IPC-каналом (см. документацию по Child Process и Cluster), свойство process.connected будет возвращать true до тех пор, пока IPC-канал подключен, и вернет false после вызова process.disconnect().

Когда process.connected имеет значение false, отправка сообщений через IPC-канал с помощью process.send() становится невозможной.

process.constrainedMemory()

История изменений
Версия Изменения
v22.16.0

Индекс стабильности для этой функции изменен с Experimental на Stable.

v22.0.0

Возвращаемое значение согласовано с uv_get_constrained_memory.

v19.6.0, v18.15.0

Добавлено в: v19.6.0, v18.15.0

  • Тип: <number>

Возвращает объем памяти, доступный процессу (в байтах), на основе ограничений, наложенных ОС. Если такого ограничения нет или оно неизвестно, возвращается 0.

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

process.cpuUsage([previousValue])

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

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

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

Модули JavaScript
import { cpuUsage } from 'node:process';

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

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

console.log(cpuUsage(startUsage));
// { user: 514883, system: 11226 }
CommonJS
const { cpuUsage } = require('node:process');

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

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

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

process.cwd()

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

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

Модули JavaScript
import { cwd } from 'node:process';

console.log(`Current directory: ${cwd()}`);
CommonJS
const { cwd } = require('node:process');

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

process.debugPort

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

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

Модули JavaScript
import process from 'node:process';

process.debugPort = 5858;
CommonJS
const process = require('node:process');

process.debugPort = 5858;

process.disconnect()

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

Если процесс Node.js порожден с IPC-каналом (см. документацию по Child Process и Cluster), метод 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++ и не должен использоваться напрямую, за исключением особых случаев. Другими словами, следует отдавать предпочтение require() перед process.dlopen(), если нет особых причин, таких как пользовательские флаги dlopen или загрузка из модулей ES.

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

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

Приведенный ниже пример показывает, как загрузить аддон C++ с именем local.node, экспортирующий функцию foo. Все символы загружаются до возврата вызова путем передачи константы RTLD_NOW. В этом примере предполагается, что константа доступна.

Модули JavaScript
import { dlopen } from 'node:process';
import { constants } from 'node:os';
import { fileURLToPath } from 'node:url';

const module = { exports: {} };
dlopen(module, fileURLToPath(new URL('local.node', import.meta.url)),
       constants.dlopen.RTLD_NOW);
module.exports.foo();
CommonJS
const { dlopen } = require('node:process');
const { constants } = require('node:os');
const { join } = require('node:path');

const module = { exports: {} };
dlopen(module, join(__dirname, 'local.node'), 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'.

Модули JavaScript
import { emitWarning } from 'node:process';

// Emit a warning with a code and additional detail.
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
CommonJS
const { emitWarning } = require('node:process');

// Emit a warning with a code and additional detail.
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'.

Модули JavaScript
import process from 'node:process';

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'
});
CommonJS
const process = require('node:process');

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'.

Модули JavaScript
import { emitWarning } from 'node:process';

// Emit a warning using a string.
emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!
CommonJS
const { emitWarning } = require('node:process');

// Emit a warning using a string.
emitWarning('Something happened!');
// Emits: (node: 56338) Warning: Something happened!
Модули JavaScript
import { emitWarning } from 'node:process';

// Emit a warning using a string and a type.
emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!
CommonJS
const { emitWarning } = require('node:process');

// Emit a warning using a string and a type.
emitWarning('Something Happened!', 'CustomWarning');
// Emits: (node:56338) CustomWarning: Something Happened!
Модули JavaScript
import { emitWarning } from 'node:process';

emitWarning('Something happened!', 'CustomWarning', 'WARN001');
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!
CommonJS
const { emitWarning } = require('node:process');

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

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

Модули JavaScript
import process from 'node:process';

process.on('warning', (warning) => {
  console.warn(warning.name);
  console.warn(warning.message);
  console.warn(warning.code);
  console.warn(warning.stack);
});
CommonJS
const process = require('node:process');

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 будут проигнорированы):

Модули JavaScript
import { emitWarning } from 'node:process';

// 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';

emitWarning(myWarning);
// Emits: (node:56338) [WARN001] CustomWarning: Something happened!
CommonJS
const { emitWarning } = require('node:process');

// 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';

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

Выбрасывается исключение TypeError, если warning не является строкой или объектом Error.

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

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

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

Предотвращение повторяющихся предупреждений

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

Модули JavaScript
import { emitWarning } from 'node:process';

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

function emitMyWarning() {
  if (!emitMyWarning.warned) {
    emitMyWarning.warned = true;
    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'
} copy

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

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

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

Модули JavaScript
import { env } from 'node:process';

env.foo = 'bar';
console.log(env.foo);
CommonJS
const { env } = require('node:process');

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

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

Модули JavaScript
import { env } from 'node:process';

env.test = null;
console.log(env.test);
// => 'null'
env.test = undefined;
console.log(env.test);
// => 'undefined'
CommonJS
const { env } = require('node:process');

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

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

Модули JavaScript
import { env } from 'node:process';

env.TEST = 1;
delete env.TEST;
console.log(env.TEST);
// => undefined
CommonJS
const { env } = require('node:process');

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

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

Модули JavaScript
import { env } from 'node:process';

env.TEST = 1;
console.log(env.test);
// => 1
CommonJS
const { env } = require('node:process');

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

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

process.execArgv

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

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

node --icu-data-dir=./foo --require ./bar.js script.js --version copy

Результат в process.execArgv:

["--icu-data-dir=./foo", "--require", "./bar.js"] copy

И в process.argv:

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

Подробную информацию о поведении рабочих потоков с этим свойством см. в разделе конструктор Worker.

process.execPath

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

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

'/usr/local/bin/node' copy

process.execve(file[, args[, env]])

Добавлено в: v22.15.0
Стабильность: 1 - Экспериментальная
  • file <string> Имя или путь к запускаемому исполняемому файлу.
  • args <string[]> Список строковых аргументов. Ни один аргумент не может содержать нулевой байт (\u0000).
  • env <Object> Пары ключ-значение переменных среды. Ни один ключ или значение не может содержать нулевой байт (\u0000). По умолчанию: process.env.

Заменяет текущий процесс новым процессом.

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

Все остальные ресурсы сбрасываются системой при замене процессов без генерации каких-либо событий exit или close и без запуска каких-либо обработчиков очистки.

Эта функция никогда не возвращает управление, за исключением случаев, когда произошла ошибка.

Эта функция недоступна в Windows или IBM i.

process.exit([code])

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

Принимает только код с типом number или строковый тип, если он представляет целое число.

v0.1.13

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

  • code <integer> | <string> | <null> | <undefined> Код завершения. Для строкового типа разрешены только строки с целыми числами (например, '1'). По умолчанию: 0.

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

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

Модули JavaScript
import { exit } from 'node:process';

exit(1);
CommonJS
const { exit } = require('node:process');

exit(1);

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

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

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

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

Модули JavaScript
import { exit } from 'node:process';

// This is an example of what *not* to do:
if (someConditionNotMet()) {
  printUsageToStdout();
  exit(1);
}
CommonJS
const { exit } = require('node:process');

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

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

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

Модули JavaScript
import process from 'node:process';

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

// 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

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

Принимает только код с типом number или строковый тип, если он представляет целое число.

v0.11.8

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

  • Тип: <integer> | <string> | <null> | <undefined> Код завершения. Для строкового типа разрешены только строки с целыми числами (например, '1'). По умолчанию: undefined.

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

Значение process.exitCode можно обновить либо присвоив значение process.exitCode, либо передав аргумент в process.exit():

$ node -e 'process.exitCode = 9'; echo $?
9
$ node -e 'process.exit(42)'; echo $?
42
$ node -e 'process.exitCode = 9; process.exit(42)'; echo $?
42 copy

Значение также может быть неявно установлено Node.js при возникновении неустранимых ошибок (например, при обнаружении неразрешенного top-level await). Однако явное изменение кода завершения всегда имеет приоритет над неявным:

$ node --input-type=module -e 'await new Promise(() => {})'; echo $?
13
$ node --input-type=module -e 'process.exitCode = 9; await new Promise(() => {})'; echo $?
9 copy

process.features.cached_builtins

Добавлено в: v12.0.0
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js кэширует встроенные модули.

process.features.debug

Добавлено в: v0.5.5
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js является отладочной (debug build).

process.features.inspector

Добавлено в: v11.10.0
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает инспектор.

process.features.ipv6

Добавлено в: v0.5.3Устарело с: v22.13.0
Стабильность: 0 - Устарело. Это свойство всегда равно true, и любые проверки на его основе являются избыточными.
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку IPv6.

Поскольку все сборки Node.js имеют поддержку IPv6, это значение всегда равно true.

process.features.require_module

Добавлено в: v22.10.0
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js поддерживает загрузку модулей ECMAScript с помощью require().

process.features.tls

Добавлено в: v0.5.3
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку TLS.

process.features.tls_alpn

Добавлено в: v4.8.0Устарело с: v22.13.0
Стабильность: 0 - Устарело. Используйте вместо этого process.features.tls.
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку ALPN в TLS.

В Node.js 11.0.0 и более поздних версиях зависимости OpenSSL имеют безусловную поддержку ALPN. Поэтому это значение идентично значению process.features.tls.

process.features.tls_ocsp

Добавлено в: v0.11.13Устарело с: v22.13.0
Стабильность: 0 - Устарело. Используйте вместо этого process.features.tls.
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку OCSP в TLS.

В Node.js 11.0.0 и более поздних версиях зависимости OpenSSL имеют безусловную поддержку OCSP. Поэтому это значение идентично значению process.features.tls.

process.features.tls_sni

Добавлено в: v0.5.3Устарело с: v22.13.0
Стабильность: 0 - Устарело. Используйте вместо этого process.features.tls.
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку SNI в TLS.

В Node.js 11.0.0 и более поздних версиях зависимости OpenSSL имеют безусловную поддержку SNI. Поэтому это значение идентично значению process.features.tls.

process.features.typescript

Добавлено в: v22.10.0
Стабильность: 1.2 - Кандидат в релиз
  • Тип: <boolean> | <string>

Значение, которое равно "strip" по умолчанию, "transform", если Node.js запущен с --experimental-transform-types, и false, если Node.js запущен с --no-experimental-strip-types.

process.features.uv

Добавлено в: v0.5.3Устарело с: v22.13.0
Стабильность: 0 - Устарело. Это свойство всегда равно true, и любые проверки на его основе являются избыточными.
  • Тип: <boolean>

Логическое значение, которое равно true, если текущая сборка Node.js включает поддержку libuv.

Поскольку собрать Node.js без libuv невозможно, это значение всегда равно true.

process.finalization.register(ref, callback)

Добавлено в: v22.5.0
Стабильность: 1.1 - В активной разработке
  • ref <Object> | <Function> Ссылка на отслеживаемый ресурс.
  • callback <Function> Функция обратного вызова, вызываемая при финализации ресурса.
    • ref <Object> | <Function> Ссылка на отслеживаемый ресурс.
    • event <string> Событие, вызвавшее финализацию. По умолчанию 'exit'.

Эта функция регистрирует колбэк, который будет вызван, когда процесс сгенерирует событие exit, если объект ref не был собран сборщиком мусора. Если объект ref был удален сборщиком мусора до генерации события exit, колбэк будет удален из реестра финализации и не будет вызван при завершении процесса.

Внутри колбэка можно освободить ресурсы, выделенные объектом ref. Обратите внимание, что все ограничения, применяемые к событию beforeExit, также применяются к функции callback; это означает, что существует вероятность, при которой колбэк не будет вызван при определенных обстоятельствах.

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

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

CommonJS
const { finalization } = require('node:process');

// Please make sure that the function passed to finalization.register()
// does not create a closure around unnecessary objects.
function onFinalize(obj, event) {
  // You can do whatever you want with the object
  obj.dispose();
}

function setup() {
  // This object can be safely garbage collected,
  // and the resulting shutdown function will not be called.
  // There are no leaks.
  const myDisposableObject = {
    dispose() {
      // Free your resources synchronously
    },
  };

  finalization.register(myDisposableObject, onFinalize);
}

setup();
Модули JavaScript
import { finalization } from 'node:process';

// Please make sure that the function passed to finalization.register()
// does not create a closure around unnecessary objects.
function onFinalize(obj, event) {
  // You can do whatever you want with the object
  obj.dispose();
}

function setup() {
  // This object can be safely garbage collected,
  // and the resulting shutdown function will not be called.
  // There are no leaks.
  const myDisposableObject = {
    dispose() {
      // Free your resources synchronously
    },
  };

  finalization.register(myDisposableObject, onFinalize);
}

setup();

Приведенный выше код основан на следующих предположениях:

  • следует избегать стрелочных функций
  • обычные функции рекомендуется размещать в глобальном контексте (root)

Обычные функции могут ссылаться на контекст, в котором существует obj, что сделает obj недоступным для сборки мусора.

Стрелочные функции будут удерживать внешний контекст. Рассмотрим, например:

class Test {
  constructor() {
    finalization.register(this, (ref) => ref.dispose());

    // Even something like this is highly discouraged
    // finalization.register(this, () => this.dispose());
  }
  dispose() {}
} copy

Маловероятно (хотя и не исключено), что этот объект будет собран сборщиком мусора, но если он не будет собран, dispose будет вызван при вызове process.exit.

Будьте осторожны и не полагайтесь на эту функцию для освобождения критически важных ресурсов, так как вызов колбэка при любых обстоятельствах не гарантируется.

process.finalization.registerBeforeExit(ref, callback)

Добавлено в: v22.5.0
Стабильность: 1.1 - В активной разработке
  • ref <Object> | <Function> Ссылка на отслеживаемый ресурс.
  • callback <Function> Функция обратного вызова, вызываемая при финализации ресурса.
    • ref <Object> | <Function> Ссылка на отслеживаемый ресурс.
    • event <string> Событие, вызвавшее финализацию. По умолчанию 'beforeExit'.

Эта функция работает точно так же, как register, за исключением того, что колбэк будет вызван, когда процесс сгенерирует событие beforeExit, если объект ref не был собран сборщиком мусора.

Обратите внимание, что все ограничения, применяемые к событию beforeExit, также применяются к функции callback; это означает, что существует вероятность, при которой колбэк не будет вызван при определенных обстоятельствах.

process.finalization.unregister(ref)

Добавлено в: v22.5.0
Стабильность: 1.1 - В активной разработке
  • ref <Object> | <Function> Ссылка на ресурс, который был зарегистрирован ранее.

Эта функция удаляет запись об объекте из реестра финализации, поэтому колбэк больше вызываться не будет.

CommonJS
const { finalization } = require('node:process');

// Please make sure that the function passed to finalization.register()
// does not create a closure around unnecessary objects.
function onFinalize(obj, event) {
  // You can do whatever you want with the object
  obj.dispose();
}

function setup() {
  // This object can be safely garbage collected,
  // and the resulting shutdown function will not be called.
  // There are no leaks.
  const myDisposableObject = {
    dispose() {
      // Free your resources synchronously
    },
  };

  finalization.register(myDisposableObject, onFinalize);

  // Do something

  myDisposableObject.dispose();
  finalization.unregister(myDisposableObject);
}

setup();
Модули JavaScript
import { finalization } from 'node:process';

// Please make sure that the function passed to finalization.register()
// does not create a closure around unnecessary objects.
function onFinalize(obj, event) {
  // You can do whatever you want with the object
  obj.dispose();
}

function setup() {
  // This object can be safely garbage collected,
  // and the resulting shutdown function will not be called.
  // There are no leaks.
  const myDisposableObject = {
    dispose() {
      // Free your resources synchronously
    },
  };

  // Please make sure that the function passed to finalization.register()
  // does not create a closure around unnecessary objects.
  function onFinalize(obj, event) {
    // You can do whatever you want with the object
    obj.dispose();
  }

  finalization.register(myDisposableObject, onFinalize);

  // Do something

  myDisposableObject.dispose();
  finalization.unregister(myDisposableObject);
}

setup();

process.getActiveResourcesInfo()

История изменений
Версия Изменения
v22.16.0

Индекс стабильности для этой функции изменен с экспериментального на стабильный.

v17.3.0, v16.14.0

Добавлено в: v17.3.0, v16.14.0

  • Возвращает: <string[]>

Метод process.getActiveResourcesInfo() возвращает массив строк, содержащий типы активных ресурсов, которые в данный момент поддерживают цикл событий в рабочем состоянии.

Модули JavaScript
import { getActiveResourcesInfo } from 'node:process';
import { setTimeout } from 'node:timers';

console.log('Before:', getActiveResourcesInfo());
setTimeout(() => {}, 1000);
console.log('After:', getActiveResourcesInfo());
// Prints:
//   Before: [ 'CloseReq', 'TTYWrap', 'TTYWrap', 'TTYWrap' ]
//   After: [ 'CloseReq', 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ]
CommonJS
const { getActiveResourcesInfo } = require('node:process');
const { setTimeout } = require('node:timers');

console.log('Before:', getActiveResourcesInfo());
setTimeout(() => {}, 1000);
console.log('After:', getActiveResourcesInfo());
// Prints:
//   Before: [ 'TTYWrap', 'TTYWrap', 'TTYWrap' ]
//   After: [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ]

process.getBuiltinModule(id)

Добавлено в: v22.3.0
  • id <string> Идентификатор запрашиваемого встроенного модуля.
  • Возвращает: <Object> | <undefined>

process.getBuiltinModule(id) предоставляет способ загрузки встроенных модулей с помощью глобально доступной функции. Модули ES, которым необходимо поддерживать другие среды, могут использовать ее для условной загрузки встроенного модуля Node.js при запуске в среде Node.js без необходимости обрабатывать ошибку разрешения модулей, которая может быть сгенерирована с помощью import в среде, отличной от Node.js, или использовать динамический import(), который либо превращает модуль в асинхронный, либо превращает синхронный API в асинхронный.

if (globalThis.process?.getBuiltinModule) {
  // Run in Node.js, use the Node.js fs module.
  const fs = globalThis.process.getBuiltinModule('fs');
  // If `require()` is needed to load user-modules, use createRequire()
  const module = globalThis.process.getBuiltinModule('module');
  const require = module.createRequire(import.meta.url);
  const foo = require('foo');
} copy

Если аргумент id указывает на встроенный модуль, доступный в текущем процессе Node.js, метод process.getBuiltinModule(id) возвращает соответствующий встроенный модуль. Если id не соответствует ни одному встроенному модулю, возвращается undefined.

process.getBuiltinModule(id) принимает идентификаторы встроенных модулей, распознаваемые функцией module.isBuiltin(id). Некоторые встроенные модули должны загружаться с префиксом node:, см. раздел встроенные модули с обязательным префиксом node:. Ссылки, возвращаемые process.getBuiltinModule(id), всегда указывают на встроенный модуль, соответствующий id, даже если пользователи изменяют require.cache таким образом, что require(id) возвращает что-то другое.

process.getegid()

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

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

Модули JavaScript
import process from 'node:process';

if (process.getegid) {
  console.log(`Current gid: ${process.getegid()}`);
}
CommonJS
const process = require('node:process');

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

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

process.geteuid()

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

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

Модули JavaScript
import process from 'node:process';

if (process.geteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
}
CommonJS
const process = require('node:process');

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

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

process.getgid()

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

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

Модули JavaScript
import process from 'node:process';

if (process.getgid) {
  console.log(`Current gid: ${process.getgid()}`);
}
CommonJS
const process = require('node:process');

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

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

process.getgroups()

Добавлено в: v0.9.4
  • Возвращает: <integer[]>

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

Модули JavaScript
import process from 'node:process';

if (process.getgroups) {
  console.log(process.getgroups()); // [ 16, 21, 297 ]
}
CommonJS
const process = require('node:process');

if (process.getgroups) {
  console.log(process.getgroups()); // [ 16, 21, 297 ]
}

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

process.getuid()

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

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

Модули JavaScript
import process from 'node:process';

if (process.getuid) {
  console.log(`Current uid: ${process.getuid()}`);
}
CommonJS
const process = require('node:process');

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

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

process.hasUncaughtExceptionCaptureCallback()

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

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

process.hrtime([time])

Добавлено в: v0.7.6
Стабильность: 3 - Устарело (Legacy). Используйте вместо этого process.hrtime.bigint().
  • time <integer[]> Результат предыдущего вызова process.hrtime()
  • Возвращает: <integer[]>

Это устаревшая версия process.hrtime.bigint(), использовавшаяся до появления bigint в JavaScript.

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

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

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

Модули JavaScript
import { hrtime } from 'node:process';

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

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

  console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
  // Benchmark took 1000000552 nanoseconds
}, 1000);
CommonJS
const { hrtime } = require('node:process');

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

setTimeout(() => {
  const diff = 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, возвращающая текущее реальное время высокого разрешения в наносекундах как bigint.

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

Модули JavaScript
import { hrtime } from 'node:process';

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

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

  console.log(`Benchmark took ${end - start} nanoseconds`);
  // Benchmark took 1154389282 nanoseconds
}, 1000);
CommonJS
const { hrtime } = require('node:process');

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

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

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

process.initgroups(user, extraGroup)

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

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

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

Модули JavaScript
import { getgroups, initgroups, setgid } from 'node:process';

console.log(getgroups());         // [ 0 ]
initgroups('nodeuser', 1000);     // switch user
console.log(getgroups());         // [ 27, 30, 46, 1000, 0 ]
setgid(1000);                     // drop root gid
console.log(getgroups());         // [ 27, 30, 46, 1000 ]
CommonJS
const { getgroups, initgroups, setgid } = require('node:process');

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

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

process.kill(pid[, signal])

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

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

Имена сигналов представляют собой строки, такие как 'SIGINT' или 'SIGHUP'. Дополнительные сведения см. в разделах События сигналов и kill(2).

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

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

Модули JavaScript
import process, { kill } from 'node:process';

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

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

kill(process.pid, 'SIGHUP');
CommonJS
const process = require('node:process');

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

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

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

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

process.loadEnvFile(path)

Добавлено в: v21.7.0, v20.12.0
Стабильность: 1.1 — активная разработка
  • path <string> | <URL> | <Buffer> | <undefined>. По умолчанию: './.env'

Загружает файл .env в process.env. Использование NODE_OPTIONS в файле .env не окажет никакого влияния на Node.js.

CommonJS
const { loadEnvFile } = require('node:process');
loadEnvFile();
Модули JavaScript
import { loadEnvFile } from 'node:process';
loadEnvFile();

process.mainModule

Добавлено в: v0.1.17Устарело начиная с: v14.0.0
Стабильность: 0 — Устарело: используйте вместо этого require.main.
  • Тип: <Object>

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

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

process.memoryUsage()

История изменений
Версия Изменения
v13.9.0, v12.17.0

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

v7.2.0

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

v0.1.16

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

  • Возвращает: <Object>
    • rss <integer>
    • heapTotal <integer>
    • heapUsed <integer>
    • external <integer>
    • arrayBuffers <integer>

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

Модули JavaScript
import { memoryUsage } from 'node:process';

console.log(memoryUsage());
// Prints:
// {
//  rss: 4935680,
//  heapTotal: 1826816,
//  heapUsed: 650472,
//  external: 49879,
//  arrayBuffers: 9386
// }
CommonJS
const { memoryUsage } = require('node:process');

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

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

Метод process.memoryUsage() выполняет итерацию по каждой странице для сбора информации об использовании памяти, что может быть медленным в зависимости от выделения памяти программой.

Примечание о memoryUsage процесса

В Linux и других системах, где часто используется glibc, приложение может демонстрировать постоянный рост rss при стабильном значении heapTotal из-за фрагментации, вызванной реализацией malloc в glibc. Информацию о том, как переключиться на альтернативную реализацию malloc для решения проблемы с производительностью, см. в nodejs/node#21973.

process.memoryUsage.rss()

Добавлено в: v15.6.0, v14.18.0
  • Возвращает: <integer>

Метод process.memoryUsage.rss() возвращает целое число, представляющее размер резидентной памяти (RSS) в байтах.

Размер резидентной памяти (Resident Set Size) — это объем пространства, занимаемый процессом в основном устройстве памяти (являющийся подмножеством общего объема выделенной памяти), включая все объекты и код C++ и JavaScript.

Это то же значение, что и свойство rss, возвращаемое process.memoryUsage(), однако process.memoryUsage.rss() работает быстрее.

Модули JavaScript
import { memoryUsage } from 'node:process';

console.log(memoryUsage.rss());
// 35655680
CommonJS
const { memoryUsage } = require('node:process');

console.log(memoryUsage.rss());
// 35655680

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

История изменений
Версия Изменения
v22.7.0

Статус стабильности изменен на «Устаревший» (Legacy).

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь приводит к выбросу ошибки ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v1.8.1

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

v0.1.26

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

Стабильность: 3 — Устарело (Legacy): используйте вместо этого queueMicrotask().
  • callback <Function>
  • ...args <any> Дополнительные аргументы, передаваемые при вызове callback

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

Модули JavaScript
import { nextTick } from 'node:process';

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

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

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

Модули JavaScript
import { nextTick } from 'node:process';

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

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

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

// thing.startDoingStuff() gets called now, not before.
CommonJS
const { nextTick } = require('node:process');

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

  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);
} copy

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

const maybeTrue = Math.random() > 0.5;

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

bar(); copy

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

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

Модули JavaScript
import { nextTick } from 'node:process';

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

  fs.stat('file', cb);
}
CommonJS
const { nextTick } = require('node:process');

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

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

Когда использовать queueMicrotask() вместо process.nextTick()

API queueMicrotask() является альтернативой process.nextTick(), которая вместо очереди «next tick» откладывает выполнение функции с использованием той же очереди микрозадач, которая применяется для выполнения обработчиков then, catch и finally разрешенных промисов.

В Node.js каждый раз при очистке очереди «next tick» очередь микрозадач очищается сразу после нее.

Поэтому в модулях CJS функции обратного вызова process.nextTick() всегда выполняются раньше, чем queueMicrotask(). Однако, поскольку модули ESM уже обрабатываются как часть очереди микрозадач, в них обратные вызовы queueMicrotask() всегда выполняются перед process.nextTick(), поскольку Node.js уже находится в процессе очистки очереди микрозадач.

Модули JavaScript
import { nextTick } from 'node:process';

Promise.resolve().then(() => console.log('resolve'));
queueMicrotask(() => console.log('microtask'));
nextTick(() => console.log('nextTick'));
// Output:
// resolve
// microtask
// nextTick
CommonJS
const { nextTick } = require('node:process');

Promise.resolve().then(() => console.log('resolve'));
queueMicrotask(() => console.log('microtask'));
nextTick(() => console.log('nextTick'));
// Output:
// nextTick
// resolve
// microtask

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

console.log('start');
queueMicrotask(() => {
  console.log('microtask callback');
});
console.log('scheduled');
// Output:
// start
// scheduled
// microtask callback copy

Одно из примечательных различий между этими двумя API заключается в том, что process.nextTick() позволяет указывать дополнительные значения, которые будут переданы в качестве аргументов в отложенную функцию при ее вызове. Для достижения аналогичного результата с помощью queueMicrotask() требуется использовать либо замыкание, либо привязанную функцию:

function deferred(a, b) {
  console.log('microtask', a + b);
}

console.log('start');
queueMicrotask(deferred.bind(undefined, 1, 2));
console.log('scheduled');
// Output:
// start
// scheduled
// microtask 3 copy

Существуют незначительные различия в обработке ошибок, возникающих внутри очереди «next tick» и очереди микрозадач. Ошибки, выброшенные внутри поставленного в очередь обратного вызова микрозадачи, по возможности должны обрабатываться внутри самого обратного вызова. Если они не обработаны, для их перехвата и обработки можно использовать обработчик событий process.on('uncaughtException').

В случае сомнений, если не требуются специфические возможности process.nextTick(), используйте queueMicrotask().

process.noDeprecation

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

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

process.permission

Добавлено в: v20.0.0
  • Тип: <Object>

Этот API доступен через флаг --permission.

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

process.permission.has(scope[, reference])

Добавлено в: v20.0.0
  • scope <string>
  • reference <string>
  • Возвращает: <boolean>

Проверяет, имеет ли процесс доступ к указанной области действия и ресурсу. Если ресурс не указан, предполагается глобальная область действия, например, process.permission.has('fs.read') проверит, имеет ли процесс ВСЕ разрешения на чтение файловой системы.

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

Доступные области действия:

  • fs — вся файловая система
  • fs.read — операции чтения файловой системы
  • fs.write — операции записи файловой системы
  • child — операции порождения дочерних процессов
  • worker — операция порождения рабочих потоков
// Check if the process has permission to read the README file
process.permission.has('fs.read', './README.md');
// Check if the process has read permission operations
process.permission.has('fs.read'); copy

process.pid

Добавлено в: v0.1.15
  • Тип: <integer>

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

Модули JavaScript
import { pid } from 'node:process';

console.log(`This process is pid ${pid}`);
CommonJS
const { pid } = require('node:process');

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

process.platform

Добавлено в: v0.1.16
  • Тип: <string>

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

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

  • 'aix'
  • 'darwin'
  • 'freebsd'
  • 'linux'
  • 'openbsd'
  • 'sunos'
  • 'win32'
Модули JavaScript
import { platform } from 'node:process';

console.log(`This platform is ${platform}`);
CommonJS
const { platform } = require('node:process');

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

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

process.ppid

Добавлено в: v9.2.0, v8.10.0, v6.13.0
  • Тип: <integer>

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

Модули JavaScript
import { ppid } from 'node:process';

console.log(`The parent process is pid ${ppid}`);
CommonJS
const { ppid } = require('node:process');

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

process.ref(maybeRefable)

Добавлено в: v22.14.0
Стабильность: 1 — Экспериментальная функция
  • maybeRefable <any> Объект, который может поддерживать протокол Refable.

Объект считается «refable», если он реализует «протокол Refable» в Node.js. В частности, это означает, что объект реализует методы Symbol.for('nodejs.ref') и Symbol.for('nodejs.unref'). Объекты с установленной ссылкой («ref'd») будут удерживать цикл событий Node.js активным, тогда как объекты без ссылки («unref'd») — нет. Исторически это реализовывалось с помощью методов ref() и unref() непосредственно на объектах. Однако этот подход признан устаревающим в пользу «протокола Refable» для лучшей поддержки типов API веб-платформы, интерфейс которых нельзя изменить для добавления методов ref() и unref(), но которым все равно требуется поддерживать такое поведение.

process.release

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

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

v3.0.0

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

  • Тип: <Object>

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

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. Это свойство присутствует только в сборках Node.js для Windows и отсутствует на всех остальных платформах.
  • lts <string> | <undefined> строковая метка, идентифицирующая статус LTS для этого релиза. Это свойство существует только для LTS-релизов и имеет значение undefined для всех других типов релизов, включая релизы Current. Допустимые значения включают кодовые имена LTS-релизов (в том числе тех, поддержка которых прекращена).
    • 'Fermium' для линейки 14.x LTS, начиная с 14.15.0.
    • 'Gallium' для линейки 16.x LTS, начиная с 16.13.0.
    • 'Hydrogen' для линейки 18.x LTS, начиная с 18.12.0. Другие кодовые имена LTS-релизов см. в архиве списков изменений Node.js
{
  name: 'node',
  lts: 'Hydrogen',
  sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz',
  headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz',
  libUrl: 'https://nodejs.org/download/release/v18.12.0/win-x64/node.lib'
} copy

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

process.report

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.8.0

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

  • Тип: <Object>

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

process.report.compact

Добавлено в: v13.12.0, v12.17.0
  • Тип: <boolean>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Reports are compact? ${report.compact}`);
CommonJS
const { report } = require('node:process');

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

process.report.directory

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.12.0

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

  • Тип: <string>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Report directory is ${report.directory}`);
CommonJS
const { report } = require('node:process');

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

process.report.filename

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.12.0

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

  • Тип: <string>

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

Если значение process.report.filename установлено в 'stdout' или 'stderr', отчёт записывается в stdout или stderr процесса соответственно.

Модули JavaScript
import { report } from 'node:process';

console.log(`Report filename is ${report.filename}`);
CommonJS
const { report } = require('node:process');

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

process.report.getReport([err])

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.8.0

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

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

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

Модули JavaScript
import { report } from 'node:process';
import util from 'node:util';

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

// Similar to process.report.writeReport()
import fs from 'node:fs';
fs.writeFileSync('my-report.log', util.inspect(data), 'utf8');
CommonJS
const { report } = require('node:process');
const util = require('node:util');

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

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

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

process.report.reportOnFatalError

История изменений
Версия Изменения
v15.0.0, v14.17.0

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

v11.12.0

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

  • Тип: <boolean>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Report on fatal error: ${report.reportOnFatalError}`);
CommonJS
const { report } = require('node:process');

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

process.report.reportOnSignal

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.12.0

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

  • Тип: <boolean>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Report on signal: ${report.reportOnSignal}`);
CommonJS
const { report } = require('node:process');

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

process.report.reportOnUncaughtException

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.12.0

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

  • Тип: <boolean>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Report on exception: ${report.reportOnUncaughtException}`);
CommonJS
const { report } = require('node:process');

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

process.report.excludeEnv

Добавлено в: v22.13.0
  • Тип: <boolean>

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

process.report.signal

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.12.0

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

  • Тип: <string>

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

Модули JavaScript
import { report } from 'node:process';

console.log(`Report signal: ${report.signal}`);
CommonJS
const { report } = require('node:process');

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

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

История изменений
Версия Изменения
v13.12.0, v12.17.0

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

v11.8.0

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

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

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

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

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

Если значение filename установлено в 'stdout' или 'stderr', отчёт записывается в stdout или stderr процесса соответственно.

Модули JavaScript
import { report } from 'node:process';

report.writeReport();
CommonJS
const { report } = require('node:process');

report.writeReport();

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

process.resourceUsage()

Добавлено в: v12.6.0
  • Возвращает: <Object> информацию об использовании ресурсов текущим процессом. Все эти значения получены из вызова uv_getrusage, который возвращает структуру uv_rusage_t.
    • userCPUTime <integer> соответствует ru_utime, вычисленному в микросекундах. Это то же значение, что и у process.cpuUsage().user.
    • systemCPUTime <integer> соответствует ru_stime, вычисленному в микросекундах. Это то же значение, что и у process.cpuUsage().system.
    • maxRSS <integer> соответствует ru_maxrss, представляющему собой максимальный объём резидентной памяти (RSS) в кибибайтах (1024 байта).
    • sharedMemorySize <integer> соответствует ru_ixrss, но не поддерживается ни на одной платформе.
    • unsharedDataSize <integer> соответствует ru_idrss, но не поддерживается ни на одной платформе.
    • unsharedStackSize <integer> соответствует ru_isrss, но не поддерживается ни на одной платформе.
    • minorPageFault <integer> соответствует ru_minflt, представляющему собой количество незначительных ошибок страниц (minor page faults) процесса, подробнее см. в этой статье.
    • majorPageFault <integer> соответствует ru_majflt, представляющему собой количество критических ошибок страниц (major page faults) процесса, подробнее см. в этой статье. Это поле не поддерживается в 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.
Модули JavaScript
import { resourceUsage } from 'node:process';

console.log(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
  }
*/
CommonJS
const { resourceUsage } = require('node:process');

console.log(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 <Object>
  • sendHandle <net.Server> | <net.Socket>
  • options <Object> используется для параметризации отправки определённых типов дескрипторов (handles). 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)

Добавлено в: v2.0.0
  • id <string> | <number> Имя или идентификатор (ID) группы

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

Модули JavaScript
import process from 'node:process';

if (process.getegid && process.setegid) {
  console.log(`Current gid: ${process.getegid()}`);
  try {
    process.setegid(501);
    console.log(`New gid: ${process.getegid()}`);
  } catch (err) {
    console.error(`Failed to set gid: ${err}`);
  }
}
CommonJS
const process = require('node:process');

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

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

process.seteuid(id)

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

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

Модули JavaScript
import process from 'node:process';

if (process.geteuid && process.seteuid) {
  console.log(`Current uid: ${process.geteuid()}`);
  try {
    process.seteuid(501);
    console.log(`New uid: ${process.geteuid()}`);
  } catch (err) {
    console.error(`Failed to set uid: ${err}`);
  }
}
CommonJS
const process = require('node:process');

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

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

process.setgid(id)

Добавлено в: v0.1.31
  • id <string> | <number> Имя или идентификатор (ID) группы

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

Модули JavaScript
import process from 'node:process';

if (process.getgid && process.setgid) {
  console.log(`Current gid: ${process.getgid()}`);
  try {
    process.setgid(501);
    console.log(`New gid: ${process.getgid()}`);
  } catch (err) {
    console.error(`Failed to set gid: ${err}`);
  }
}
CommonJS
const process = require('node:process');

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

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

process.setgroups(groups)

Добавлено в: v0.9.4
  • groups <integer[]>

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

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

Модули JavaScript
import process from 'node:process';

if (process.getgroups && process.setgroups) {
  try {
    process.setgroups([501]);
    console.log(process.getgroups()); // new groups
  } catch (err) {
    console.error(`Failed to set groups: ${err}`);
  }
}
CommonJS
const process = require('node:process');

if (process.getgroups && process.setgroups) {
  try {
    process.setgroups([501]);
    console.log(process.getgroups()); // new groups
  } catch (err) {
    console.error(`Failed to set groups: ${err}`);
  }
}

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

process.setuid(id)

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

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

Модули JavaScript
import process from 'node:process';

if (process.getuid && process.setuid) {
  console.log(`Current uid: ${process.getuid()}`);
  try {
    process.setuid(501);
    console.log(`New uid: ${process.getuid()}`);
  } catch (err) {
    console.error(`Failed to set uid: ${err}`);
  }
}
CommonJS
const process = require('node:process');

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

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

process.setSourceMapsEnabled(val)

Добавлено в: v16.6.0, v14.18.0
Стабильность: 1 - Экспериментальная функция: используйте вместо этого module.setSourceMapsSupport().
  • val <boolean>

Эта функция включает или отключает поддержку Source Map для трассировок стека.

Она предоставляет те же возможности, что и запуск процесса Node.js с параметрами командной строки --enable-source-maps.

Парситься и загружаться будут только карты исходного кода (source maps) в файлах JavaScript, загруженных после включения поддержки source maps.

Это подразумевает вызов module.setSourceMapsSupport() с параметром { nodeModules: true, generatedCode: true }.

process.setUncaughtExceptionCaptureCallback(fn)

Добавлено в: v9.3.0
  • fn <Function> | <null>

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

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

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

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

process.sourceMapsEnabled

Добавлено в: v20.7.0, v18.19.0
Стабильность: 1 - Экспериментальная функция: используйте вместо этого module.getSourceMapsSupport().
  • Тип: <boolean>

Свойство process.sourceMapsEnabled возвращает, включена ли поддержка Source Map для трассировок стека.

process.stderr

  • Тип: <Stream>

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

Поток process.stderr существенно отличается от других потоков Node.js. Дополнительные сведения см. в примечании о вводе-выводе процесса.

process.stderr.fd

  • Тип: <number>

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

process.stdin

  • Тип: <Stream>

Свойство process.stdin возвращает поток, подключенный к stdin (fd 0). Это net.Socket (являющийся дуплексным потоком Duplex), если fd 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 (fd 1). Это net.Socket (который является потоком Duplex), если только fd 1 не ссылается на файл, и в этом случае это поток Writable.

Например, для копирования process.stdin в process.stdout:

Модули JavaScript
import { stdin, stdout } from 'node:process';

stdin.pipe(stdout);
CommonJS
const { stdin, stdout } = require('node:process');

stdin.pipe(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().

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

Чтобы проверить, подключен ли поток к контексту 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 copy

Дополнительные сведения см. в документации 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' } copy

process.threadCpuUsage([previousValue])

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

Метод process.threadCpuUsage() возвращает время использования процессора в пользовательском и системном режимах текущим рабочим потоком в виде объекта со свойствами user и system, значения которых выражены в микросекундах (миллионных долях секунды).

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

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 может не привести к точному отображению метки в приложениях управления процессами, таких как «Мониторинг системы» (Activity Monitor) в macOS или Диспетчер служб Windows.

process.traceDeprecation

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

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

process.umask()

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

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

v0.1.19

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

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

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

process.umask(mask)

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

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

Модули JavaScript
import { umask } from 'node:process';

const newmask = 0o022;
const oldmask = umask(newmask);
console.log(
  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`,
);
CommonJS
const { umask } = require('node:process');

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

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

process.unref(maybeRefable)

Добавлено в: v22.14.0
Стабильность: 1 — Экспериментальная функция (Experimental)
  • maybeUnfefable <any> Объект, который может быть "unref'd".

Объект считается «unrefable», если он реализует «протокол Refable» Node.js. В частности, это означает, что объект реализует методы Symbol.for('nodejs.ref') и Symbol.for('nodejs.unref'). Объекты с «ref'd» поддерживают цикл событий Node.js в активном состоянии, а объекты с «unref'd» — нет. Исторически это реализовывалось с помощью методов ref() и unref() непосредственно у объектов. Однако этот паттерн объявляется устаревшим в пользу «протокола Refable» для лучшей поддержки типов API веб-платформы (Web Platform API), чьи API нельзя изменить для добавления методов ref() и unref(), но которым все еще требуется поддерживать такое поведение.

process.uptime()

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

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

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

process.version

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

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

Модули JavaScript
import { version } from 'node:process';

console.log(`Version: ${version}`);
// Version: v14.8.0
CommonJS
const { version } = require('node:process');

console.log(`Version: ${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, которая увеличивается каждый раз при изменении C++ API. Node.js откажется загружать модули, скомпилированные для другой версии ABI модуля.

Модули JavaScript
import { versions } from 'node:process';

console.log(versions);
CommonJS
const { versions } = require('node:process');

console.log(versions);

Сгенерирует объект, аналогичный следующему:

{ node: '23.0.0',
  acorn: '8.11.3',
  ada: '2.7.8',
  ares: '1.28.1',
  base64: '0.5.2',
  brotli: '1.1.0',
  cjs_module_lexer: '1.2.2',
  cldr: '45.0',
  icu: '75.1',
  llhttp: '9.2.1',
  modules: '127',
  napi: '9',
  nghttp2: '1.61.0',
  nghttp3: '0.7.0',
  ngtcp2: '1.3.0',
  openssl: '3.0.13+quic',
  simdjson: '3.8.0',
  simdutf: '5.2.4',
  sqlite: '3.46.0',
  tz: '2024a',
  undici: '6.13.0',
  unicode: '15.1',
  uv: '1.48.0',
  uvwasi: '0.0.20',
  v8: '12.4.254.14-node.11',
  zlib: '1.3.0.1-motley-7d77fb7' } copy

Коды выхода

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

  • 1 Неперехваченное критическое исключение (Uncaught Fatal Exception): возникло неперехваченное исключение, которое не было обработано доменом или обработчиком события 'uncaughtException'.
  • 2: не используется (зарезервировано Bash для ошибок использования встроенных команд)
  • 3 Внутренняя ошибка парсинга JavaScript (Internal JavaScript Parse Error): исходный код JavaScript внутри процесса начальной загрузки Node.js вызвал ошибку парсинга. Это крайне редкое явление, которое обычно может произойти только при разработке самого Node.js.
  • 4 Ошибка внутреннего вычисления JavaScript (Internal JavaScript Evaluation Failure): при выполнении исходного кода JavaScript внутри процесса начальной загрузки Node.js не удалось получить значение функции. Это крайне редкое явление, которое обычно может произойти только при разработке самого Node.js.
  • 5 Фатальная ошибка (Fatal Error): в V8 произошла неустранимая фатальная ошибка. Обычно в stderr выводится сообщение с префиксом FATAL ERROR.
  • 6 Внутренний обработчик исключений не является функцией (Non-function Internal Exception Handler): возникло неперехваченное исключение, но внутренней функции обработки фатальных исключений по какой-то причине было присвоено значение, не являющееся функцией, и она не смогла быть вызвана.
  • 7 Сбой во время выполнения внутреннего обработчика исключений (Internal Exception Handler Run-Time Failure): возникло неперехваченное исключение, и сама внутренняя функция обработки фатальных исключений выбросила ошибку при попытке его обработать. Это может произойти, например, если обработчик 'uncaughtException' или domain.on('error') выбрасывает ошибку.
  • 8: не используется. В предыдущих версиях Node.js код выхода 8 иногда указывал на неперехваченное исключение.
  • 9 Недопустимый аргумент (Invalid Argument): указан неизвестный параметр либо параметр, требующий значения, был передан без значения.
  • 10 Внутренний сбой среды выполнения JavaScript (Internal JavaScript Run-Time Failure): исходный код JavaScript внутри процесса начальной загрузки Node.js выбросил ошибку при вызове функции начальной загрузки. Это крайне редкое явление, которое обычно может произойти только при разработке самого Node.js.
  • 12 Недопустимый аргумент отладки (Invalid Debug Argument): были заданы параметры --inspect и/или --inspect-brk, но выбранный номер порта оказался недопустимым или недоступным.
  • 13 Неразрешенный await верхнего уровня (Unsettled Top-Level Await): await использовался вне функции в коде верхнего уровня, но переданный Promise так и не завершился (never settled).
  • 14 Ошибка создания снимка (Snapshot Failure): Node.js был запущен для создания снимка запуска V8, но произошел сбой из-за несоблюдения определенных требований к состоянию приложения.
  • >128 Завершение по сигналу (Signal Exits): если 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-v22.x/docs/api/process.html

Spec-Zone.ru

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