Процесс
Объект process является глобальным и доступен из любой точки кода. Он является экземпляром EventEmitter.
Событие: 'beforeExit'
Это событие генерируется, когда Node.js опорожняет цикл событий и больше не имеет задач для выполнения. Обычно Node.js завершается, когда нет запланированных задач, но обработчик события 'beforeExit' может вызывать асинхронные операции и заставить Node.js продолжить работу.
Событие 'beforeExit' не генерируется для условий явного завершения, таких как process.exit() или необработанные исключения, и не должно использоваться как альтернатива событию 'exit', если нет необходимости запланировать дополнительные задачи.
Событие: 'exit'
Генерируется, когда процесс собирается завершиться. В этот момент невозможно предотвратить выход из цикла событий, и после завершения выполнения всех обработчиков события 'exit' процесс завершится. Поэтому в обработчике этого события обязательно должны выполняться только синхронные операции. Это полезно для проверки состояния модуля (например, для юнит-тестов). Обработчик принимает один аргумент — код, с которым завершается процесс.
Это событие генерируется только при явном выходе Node.js с помощью process.exit() или неявном выходе при опорожнении цикла событий.
Пример прослушивания события 'exit':
process.on('exit', (code) => {
// do *NOT* do this
setTimeout(() => {
console.log('This will not run');
}, 0);
console.log('About to exit with code:', code);
});
Событие: 'message'
-
message<Объект> — распарсенный JSON-объект или примитивное значение -
sendHandle<Объект дескриптора> — объектnet.Socketилиnet.Server, или undefined.
Сообщения, отправленные с помощью ChildProcess.send(), получаются с помощью события 'message' на объекте процесса дочернего процесса.
Событие: 'rejectionHandled'
Генерируется всякий раз, когда Promise отклоняется, а обработчик ошибок к нему прикреплен (например, с помощью .catch()) позже, чем после одного цикла событий. Это событие генерируется со следующими аргументами:
-
pPromise, который ранее был передан в событии'unhandledRejection', но который теперь имеет обработчик отклонения.
Нет понятия верхнего уровня для цепочки обещаний, в котором отклонения всегда могут быть обработаны. По своей сути, асинхронное отклонение Promise может быть обработано в будущем — возможно, намного позже, чем цикл событий, в котором генерируется событие 'unhandledRejection'.
Другими словами, в отличие от синхронного кода, где есть постоянно растущий список необработанных исключений, с обещаниями есть растущий и сокращающийся список необработанных отклонений. В синхронном коде событие 'uncaughtException' сообщает вам, когда список необработанных исключений увеличивается. В асинхронном коде событие 'unhandledRejection' сообщает вам, когда список необработанных отклонений увеличивается, а событие 'rejectionHandled' — когда список необработанных отклонений уменьшается.
Например, используя обработчики обнаружения отклонений, чтобы сохранить карту всех причин отклонения Promise в данный момент:
const unhandledRejections = new Map();
process.on('unhandledRejection', (reason, p) => {
unhandledRejections.set(p, reason);
});
process.on('rejectionHandled', (p) => {
unhandledRejections.delete(p);
});
Эта карта будет увеличиваться и уменьшаться со временем, отражая отклонения, которые начинают обрабатываться, а затем обрабатываются. Вы можете записать ошибки в какой-либо журнал ошибок, либо периодически (вероятно, лучше для долгоживущих программ, позволяя очистить карту, которая в случае очень ошибочной программы может расти бесконечно), либо при выходе процесса (более удобно для скриптов).
Событие: 'uncaughtException'
Событие 'uncaughtException' генерируется, когда исключение поднимается до цикла событий. По умолчанию Node.js обрабатывает такие исключения, выводя трассировку стека в stderr и завершая работу. Добавление обработчика для события 'uncaughtException' переопределяет это поведение по умолчанию.
Например:
process.on('uncaughtException', (err) => {
console.log(`Caught exception: ${err}`);
});
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'
Обратите внимание, что 'uncaughtException' — это грубый механизм обработки исключений, который следует использовать только в крайнем случае. Событие не следует использовать как аналог On Error Resume Next. Необработанные исключения означают, что приложение находится в неопределенном состоянии. Попытка возобновить выполнение кода приложения без правильного восстановления после исключения может привести к дополнительным непредвиденным и непредсказуемым проблемам.
Исключения, сгенерированные внутри обработчика события, не будут перехвачены. Вместо этого процесс завершится с ненулевым кодом выхода, и будет напечатана трассировка стека. Это сделано для предотвращения бесконечной рекурсии.
Попытка продолжить нормальную работу после необработанного исключения может быть подобна выдергиванию шнура питания при модернизации компьютера — в девяти из десяти случаев ничего не происходит, но в десятый раз система повреждается.
Правильное использование события 'uncaughtException' заключается в выполнении синхронной очистки выделенных ресурсов (например, дескрипторов файлов, дескрипторов и т. д.) перед завершением процесса. После события 'uncaughtException' нельзя безопасно продолжать нормальную работу.
Событие: 'unhandledRejection'
Генерируется всякий раз, когда Promise отклоняется, и обработчик ошибок к promise не прикреплен в течение одного цикла событий. При программировании с обещаниями исключения инкапсулируются как отклоненные обещания. Такие обещания могут быть перехвачены и обработаны с помощью promise.catch(...), а отклонения передаются через цепочку обещаний. Это событие полезно для обнаружения и отслеживания обещаний, которые были отклонены, и чьи отклонения еще не обработаны. Это событие генерируется со следующими аргументами:
-
reason— объект, с помощью которого было отклонено обещание (обычно экземплярError). -
p— обещание, которое было отклонено.
Вот пример, который записывает каждое необработанное отклонение в консоль
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
// application specific logging, throwing an error, or other logic here
});
Например, вот отклонение, которое сгенерирует событие 'unhandledRejection':
somePromise.then((res) => {
return reportToUser(JSON.pasre(res)); // note the typo (`pasre`)
}); // no `.catch` or `.then`
Вот пример шаблона кодирования, который также сгенерирует событие 'unhandledRejection':
function SomeResource() {
// Initially set the loaded status to a rejected promise
this.loaded = Promise.reject(new Error('Resource not yet loaded!'));
}
var resource = new SomeResource();
// no .catch or .then on resource.loaded for at least a turn
В таких случаях вам может не потребоваться отслеживать отклонение как ошибку разработчика, как для других событий 'unhandledRejection'. Для решения этой проблемы можно либо подключить подставной обработчик .catch(() => { }) к resource.loaded, предотвращая таким образом генерацию события 'unhandledRejection', либо использовать событие 'rejectionHandled'.
Коды выхода
Node.js обычно завершает работу с кодом состояния 0 когда больше нет асинхронных операций. В других случаях используются следующие коды состояния:
-
1Необработанное критическое исключение — произошла необработанная ошибка, и она не была обработана областью или обработчиком события'uncaughtException'. -
2— Не используется (зарезервировано Bash для неправильного использования встроенных функций) -
3Внутренняя ошибка синтаксического анализа JavaScript — внутренний код JavaScript в процессе запуска Node.js вызвал ошибку синтаксического анализа. Это крайне редко и, как правило, может произойти только при разработке самого Node.js. -
4Внутренняя ошибка выполнения JavaScript — внутренний код JavaScript в процессе запуска Node.js не смог вернуть значение функции при оценке. Это крайне редко и, как правило, может произойти только при разработке самого Node.js. -
5Критическая ошибка — произошла критическая невосстановимая ошибка в V8. Обычно сообщение выводится в stderr с префиксомFATAL ERROR. -
6Обработчик внутренних исключений — не функция — произошла необработанная ошибка, но внутренняя функция обработчика критических исключений была как-то установлена не как функция и не могла быть вызвана. -
7Ошибка во время выполнения внутреннего обработчика исключений — произошла необработанная ошибка, и сама внутренняя функция обработки критических исключений выбросила ошибку при попытке обработать её. Это может произойти, например, если обработчикprocess.on('uncaughtException')илиdomain.on('error')выбросит ошибку. -
8— Не используется. В предыдущих версиях Node.js код выхода 8 иногда указывал на необработанное исключение. -
9— Неверный аргумент — был указан неизвестный параметр или параметр, требующий значения, был предоставлен без значения. -
10Внутренняя ошибка выполнения JavaScript — внутренний код JavaScript в процессе запуска Node.js выбросил ошибку при вызове функции запуска. Это крайне редко и, как правило, может произойти только при разработке самого Node.js. -
12Неверный аргумент отладки — параметры--debugи/или--debug-brkбыли установлены, но был выбран неверный номер порта. -
>128Сигналы завершения — если Node.js получит фатальный сигнал, такой какSIGKILLилиSIGHUP, то его код выхода будет128плюс значение кода сигнала. Это стандартная практика Unix, так как коды выхода определены как 7-битные целые числа, а сигналы выхода устанавливают старший бит и затем содержат значение кода сигнала.
События сигналов
Генерируются при получении процессом сигнала. См. sigaction(7) для списка стандартных имён сигналов POSIX, таких как SIGINT, SIGHUP, и т. д.
Пример прослушивания события SIGINT:
// Start reading from stdin so we don't exit.
process.stdin.resume();
process.on('SIGINT', () => {
console.log('Got SIGINT. Press Control-D to exit.');
});
Легкий способ отправить сигнал SIGINT — использовать Control-C в большинстве терминальных программ.
Примечание:
-
SIGUSR1зарезервирован Node.js для запуска отладчика. Можно установить обработчик, но это не остановит запуск отладчика. -
SIGTERMиSIGINTимеют обработчики по умолчанию на платформах, не являющихся Windows, которые сбрасывают режим терминала перед завершением с кодом128 + signal number. Если для одного из этих сигналов установлен обработчик, его поведение по умолчанию будет удалено (Node.js больше не завершится). -
SIGPIPEпо умолчанию игнорируется. Для него можно установить обработчик. -
SIGHUPгенерируется в Windows при закрытии окна консоли и на других платформах при различных аналогичных условиях, см. signal(7). Для него можно установить обработчик, однако Node.js будет безусловно завершен Windows примерно через 10 секунд. На платформах, отличных от Windows, по умолчаниюSIGHUPзавершает Node.js, но после установки обработчика его поведение по умолчанию будет удалено. -
SIGTERMне поддерживается в Windows, на него можно подписаться. -
SIGINTиз терминала поддерживается на всех платформах и обычно может быть сгенерирован с помощьюCTRL+C(хотя это может быть настраиваемо). Он не генерируется при включенном режиме сырого ввода терминала. -
SIGBREAKдоставляется в Windows при нажатииCTRL+BREAK, на платформах, отличных от Windows, на него можно подписаться, но нет способа отправить или сгенерировать его. -
SIGWINCHдоставляется при изменении размера консоли. В Windows это произойдет только при записи в консоль при перемещении курсора или при использовании читабельного tty в режиме сырого ввода. -
SIGKILLне может иметь установленного обработчика, он безусловно завершит Node.js на всех платформах. -
SIGSTOPне может иметь установленного обработчика.
Обратите внимание, что в Windows не поддерживается отправка сигналов, но Node.js предлагает некоторую эмуляцию с помощью process.kill(), и child_process.kill(). Отправка сигнала 0 может использоваться для проверки существования процесса. Отправка SIGINT, SIGTERM, и SIGKILL вызывает безусловное завершение целевого процесса.
process.abort()
Это заставляет Node.js выпустить событие abort. Это приведет к завершению работы Node.js и генерации файла core.
process.arch
Архитектура процессора, на котором вы работаете: 'arm', 'ia32', или 'x64'.
console.log('This processor architecture is ' + process.arch);
process.argv
Массив, содержащий аргументы командной строки. Первый элемент будет 'node', второй — имя файла JavaScript. Следующие элементы — дополнительные аргументы командной строки.
// print process.argv
process.argv.forEach((val, index, array) => {
console.log(`${index}: ${val}`);
});
Это сгенерирует:
$ node process-2.js one two=three four 0: node 1: /Users/mjr/work/node/process-2.js 2: one 3: two=three 4: four
process.chdir(directory)
Изменяет текущий рабочий каталог процесса или выбрасывает исключение, если это не удалось.
console.log(`Starting directory: ${process.cwd()}`);
try {
process.chdir('/tmp');
console.log(`New directory: ${process.cwd()}`);
}
catch (err) {
console.log(`chdir: ${err}`);
}
process.config
Объект, содержащий JavaScript-представление опций конфигурации, которые были использованы для компиляции текущего исполняемого файла Node.js. Это то же самое, что и файл config.gypi, который был создан при выполнении скрипта ./configure.
Пример возможного результата:
{
target_defaults:
{ cflags: [],
default_configuration: 'Release',
defines: [],
include_dirs: [],
libraries: [] },
variables:
{
host_arch: 'x64',
node_install_npm: 'true',
node_prefix: '',
node_shared_cares: 'false',
node_shared_http_parser: 'false',
node_shared_libuv: 'false',
node_shared_zlib: 'false',
node_use_dtrace: 'false',
node_use_openssl: 'true',
node_shared_openssl: 'false',
strict_aliasing: 'true',
target_arch: 'x64',
v8_use_snapshot: 'true'
}
}
Примечание: свойство process.config не является только для чтения, и в экосистеме существуют модули, которые, как известно, расширяют, изменяют или полностью заменяют значение process.config.
process.connected
-
<Boolean> Устанавливается в false после вызова
process.disconnect()
Если process.connected равно false, отправка сообщений больше невозможна.
process.cpuUsage([previousValue])
Возвращает использование процессорного времени (пользовательское и системное) текущего процесса в объекте со свойствами user и system, значения которых являются значениями в микросекундах (миллионных долях секунды). Эти значения измеряют время, потраченное в коде пользователя и системы соответственно, и могут оказаться больше фактического прошедшего времени, если несколько ядер процессора выполняют работу для этого процесса.
Результат предыдущего вызова process.cpuUsage() может быть передан в качестве аргумента функции для получения значения разницы.
const startUsage = process.cpuUsage();
// { user: 38579, system: 6986 }
// spin the CPU for 500 milliseconds
const now = Date.now();
while (Date.now() - now < 500);
console.log(process.cpuUsage(startUsage));
// { user: 514883, system: 11226 }
process.cwd()
Возвращает текущий рабочий каталог процесса.
console.log(`Current directory: ${process.cwd()}`);
process.disconnect()
Закрывает канал IPC с родительским процессом, позволяя этому дочернему процессу завершиться без ошибок, если нет других подключений, которые его поддерживают.
Идентично методу родительского процесса ChildProcess.disconnect().
Если Node.js не был запущен с каналом IPC, process.disconnect() будет undefined.
process.env
Объект, содержащий пользовательскую среду. См. environ(7).
Пример этого объекта:
{ TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node' }
Вы можете записывать в этот объект, но изменения не будут отражаться за пределами вашего процесса. Это означает, что следующее не сработает:
$ node -e 'process.env.foo = "bar"' && echo $foo
Но это сработает:
process.env.foo = 'bar'; console.log(process.env.foo);
Присваивание свойства объекту process.env неявно преобразует значение в строку.
Пример:
process.env.test = null; console.log(process.env.test); // => 'null' process.env.test = undefined; console.log(process.env.test); // => 'undefined'
Используйте delete для удаления свойства из process.env.
Пример:
process.env.TEST = 1; delete process.env.TEST; console.log(process.env.TEST); // => undefined
process.execArgv
Это набор опций командной строки, специфичных для Node.js, из исполняемого файла, который запустил процесс. Эти опции не отображаются в process.argv, и не включают исполняемый файл Node.js, имя скрипта или любые опции после имени скрипта. Эти опции полезны для запуска дочерних процессов с той же средой выполнения, что и родительский.
Пример:
$ node --harmony script.js --version
приводит к process.execArgv:
['--harmony']
и process.argv:
['/usr/local/bin/node', 'script.js', '--version']
process.execPath
Это абсолютный путь к исполняемому файлу, который запустил процесс.
Пример:
/usr/local/bin/node
process.exit([code])
Завершает процесс с указанным code. Если опущено, используется код "успеха" 0.
Чтобы завершить с кодом "ошибки":
process.exit(1);
Оболочка, которая выполнила Node.js, должна увидеть код завершения как 1.
process.exitCode
Число, которое будет кодом завершения процесса, когда процесс завершается нормально или завершается с помощью process.exit() без указания кода.
Указание кода для process.exit(code) переопределит любое предыдущее значение process.exitCode.
process.getegid()
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Получает эффективную группу идентификаторов процесса. (См. getegid(2).) Это числовой идентификатор группы, а не имя группы.
if (process.getegid) {
console.log(`Current gid: ${process.getegid()}`);
}
process.geteuid()
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Получает эффективную идентификацию пользователя процесса. (См. geteuid(2).) Это числовой идентификатор пользователя, а не имя пользователя.
if (process.geteuid) {
console.log(`Current uid: ${process.geteuid()}`);
}
process.getgid()
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Получает идентификатор группы процесса. (См. getgid(2).) Это числовой идентификатор группы, а не имя группы.
if (process.getgid) {
console.log(`Current gid: ${process.getgid()}`);
}
process.getgroups()
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Возвращает массив дополнительных идентификаторов групп. POSIX не определяет, включен ли эффективный идентификатор группы, но Node.js гарантирует, что он всегда включен.
process.getuid()
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Получает идентификацию пользователя процесса. (См. getuid(2).) Это числовой идентификатор пользователя, а не имя пользователя.
if (process.getuid) {
console.log(`Current uid: ${process.getuid()}`);
}
process.hrtime()
Возвращает текущее время реального времени с высокой точностью в виде [seconds, nanoseconds] кортежа массива. Оно относительно произвольного момента в прошлом. Оно не связано со временем суток и, следовательно, не подвержено сбою часов. Основное использование — для измерения производительности между интервалами.
Вы можете передать результат предыдущего вызова process.hrtime() для получения значения разницы, полезного для бенчмарков и измерения интервалов:
var time = process.hrtime();
// [ 1800216, 25 ]
setTimeout(() => {
var diff = process.hrtime(time);
// [ 1, 552 ]
console.log('benchmark took %d nanoseconds', diff[0] * 1e9 + diff[1]);
// benchmark took 1000000527 nanoseconds
}, 1000);
process.initgroups(user, extra_group)
Примечание: эта функция доступна только на платформах POSIX (т.е. не на Windows, Android)
Считывает /etc/group и инициализирует список доступа к группам, используя все группы, членами которых является пользователь. Это привилегированная операция, т.е. вам нужен root или доступ к CAP_SETGID capability.
user — имя пользователя или идентификатор пользователя. extra_group — имя группы или идентификатор группы.
Необходимо проявлять осторожность при снижении привилегий. Пример:
console.log(process.getgroups()); // [ 0 ]
process.initgroups('bnoordhuis', 1000); // switch user
console.log(process.getgroups()); // [ 27, 30, 46, 1000, 0 ]
process.setgid(1000); // drop root gid
console.log(process.getgroups()); // [ 27, 30, 46, 1000 ]
process.kill(pid[, signal])
Отправить сигнал процессу. pid — идентификатор процесса, а signal — строка, описывающая отправляемый сигнал. Имена сигналов — это строки, например, SIGINT или SIGHUP. Если сигнал не указан, используется SIGTERM. Для получения дополнительной информации см. События сигналов и kill(2).
Вызовет ошибку, если целевой процесс не существует; в качестве специального случая, сигнал 0 может использоваться для проверки существования процесса. На платформах Windows вызовет ошибку, если pid используется для завершения процесса группы.
Обратите внимание, что, хотя имя этой функции — process.kill, она на самом деле просто отправляет сигнал, как и системный вызов kill. Отправленный сигнал может сделать что-то отличное от завершения целевого процесса.
Пример отправки сигнала самому себе:
process.on('SIGHUP', () => {
console.log('Got SIGHUP signal.');
});
setTimeout(() => {
console.log('Exiting.');
process.exit(0);
}, 100);
process.kill(process.pid, 'SIGHUP');
Примечание: при получении сигнала SIGUSR1 Node.js запускает отладчик; см. События сигналов.
process.mainModule
Альтернативный способ получения require.main. Различие заключается в том, что если основной модуль меняется во время выполнения, require.main может по-прежнему ссылаться на исходный основной модуль в модулях, которые были загружены до изменения. В целом, можно считать, что оба объекта ссылаются на один и тот же модуль.
Как и в случае с require.main, он будет undefined в случае отсутствия скрипта входа.
process.memoryUsage()
- Возвращает: <Объект>
-
rss<Целое число> -
heapTotal<Целое число> -
heapUsed<Целое число> -
external<Целое число>
-
Метод process.memoryUsage() возвращает объект, описывающий использование памяти процессом Node.js, измеренное в байтах.
Например, код:
console.log(process.memoryUsage());
Это сгенерирует:
{ rss: 4935680,
heapTotal: 1826816,
heapUsed: 650472,
external: 49879
}
heapTotal и heapUsed относятся к использованию памяти V8. external относится к использованию памяти объектами C++, привязанными к объектам JavaScript, управляемым V8.
process.nextTick(callback[, arg][, ...])
-
callback<Функция>
После завершения текущего цикла событий вызовите функцию обратного вызова.
Это не простой псевдоним для setTimeout(fn, 0), он гораздо эффективнее. Он выполняется до запуска дополнительных событий ввода-вывода (включая таймеры) в последующих циклах событий.
console.log('start');
process.nextTick(() => {
console.log('nextTick callback');
});
console.log('scheduled');
// Output:
// start
// scheduled
// nextTick callback
Это важно при разработке API, где необходимо дать пользователю возможность назначить обработчики событий после создания объекта, но до выполнения операций ввода-вывода.
function MyThing(options) {
this.setupOptions(options);
process.nextTick(() => {
this.startDoingStuff();
});
}
var 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);
}
Это небезопасно. Если вы делаете так:
maybeSync(true, () => {
foo();
});
bar();
то не ясно, какой из вызовов foo() или bar() будет выполнен первым.
Этот подход намного лучше:
function definitelyAsync(arg, cb) {
if (arg) {
process.nextTick(cb);
return;
}
fs.stat('file', cb);
}
Примечание: очередь nextTick полностью очищается в каждом проходе цикла событий перед обработкой дополнительных событий ввода-вывода. В результате рекурсивное задание обратных вызовов nextTick будет блокировать любые операции ввода-вывода, как цикл while(true);.
process.pid
Идентификатор процесса (PID).
console.log(`This process is pid ${process.pid}`);
process.platform
Платформа, на которой вы выполняете программу: 'darwin', 'freebsd', 'linux', 'sunos' или 'win32'
console.log(`This platform is ${process.platform}`);
process.release
Объект, содержащий метаданные, относящиеся к текущей версии, включая URL для исходного файла tar и файла tar только с заголовками.
process.release содержит следующие свойства:
-
name: строка со значением, которое всегда будет'node'для Node.js. Для устаревших версий io.js это будет'io.js'. -
sourceUrl: полный URL, указывающий на файл .tar.gz с исходным кодом текущей версии. -
headersUrl: полный URL, указывающий на файл .tar.gz, содержащий только заголовочные файлы текущей версии. Этот файл значительно меньше исходного файла и может использоваться для компиляции дополнений для Node.js. -
libUrl: полный URL, указывающий на файл node.lib, соответствующий архитектуре и версии текущей версии. Этот файл используется для компиляции дополнений для Node.js. Это свойство присутствует только в Windows-версиях Node.js и отсутствует на других платформах.
Например:
{ name: 'node',
sourceUrl: 'https://nodejs.org/download/release/v4.0.0/node-v4.0.0.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v4.0.0/node-v4.0.0-headers.tar.gz',
libUrl: 'https://nodejs.org/download/release/v4.0.0/win-x64/node.lib' }
В пользовательских сборках из нерелизов исходного кода может присутствовать только свойство name. Не следует полагаться на существование дополнительных свойств.
process.send(message[, sendHandle][, callback])
-
message<Объект> -
sendHandle<Объект-дескриптор> -
callback<Функция> - Возвращает: <Булево значение>
Если Node.js запущен с подключенным каналом межпроцессного взаимодействия, он может отправлять сообщения своему родительскому процессу с помощью process.send(). Каждое сообщение будет получено как событие 'message' в объекте родительского процесса ChildProcess.
Примечание: эта функция использует JSON.stringify() для сериализации message.
Если Node.js не был запущен с каналом межпроцессного взаимодействия, process.send() будет undefined.
process.setegid(id)
Примечание: эта функция доступна только на платформах POSIX (то есть не на Windows и Android)
Устанавливает эффективную идентификацию группы процесса. (См. setegid(2).) Принимает числовой идентификатор или строку имени группы. Если указано имя группы, этот метод блокируется во время преобразования в числовой идентификатор.
if (process.getegid && process.setegid) {
console.log(`Current gid: ${process.getegid()}`);
try {
process.setegid(501);
console.log(`New gid: ${process.getegid()}`);
}
catch (err) {
console.log(`Failed to set gid: ${err}`);
}
}
process.seteuid(id)
Примечание: эта функция доступна только на платформах POSIX (то есть не на Windows и Android)
Устанавливает эффективную идентификацию пользователя процесса. (См. seteuid(2).) Принимает числовой идентификатор или строку имени пользователя. Если указано имя пользователя, этот метод блокируется во время преобразования в числовой идентификатор.
if (process.geteuid && process.seteuid) {
console.log(`Current uid: ${process.geteuid()}`);
try {
process.seteuid(501);
console.log(`New uid: ${process.geteuid()}`);
}
catch (err) {
console.log(`Failed to set uid: ${err}`);
}
}
process.setgid(id)
Примечание: эта функция доступна только на платформах POSIX (то есть не на Windows и Android)
Устанавливает идентификацию группы процесса. (См. setgid(2).) Принимает числовой идентификатор или строку имени группы. Если указано имя группы, этот метод блокируется во время преобразования в числовой идентификатор.
if (process.getgid && process.setgid) {
console.log(`Current gid: ${process.getgid()}`);
try {
process.setgid(501);
console.log(`New gid: ${process.getgid()}`);
}
catch (err) {
console.log(`Failed to set gid: ${err}`);
}
}
process.setgroups(groups)
Примечание: эта функция доступна только на платформах POSIX (то есть не на Windows и Android)
Устанавливает дополнительные идентификаторы групп. Это привилегированная операция, то есть вам нужно быть root или иметь возможность CAP_SETGID.
Список может содержать идентификаторы групп, имена групп или оба.
process.setuid(id)
Примечание: эта функция доступна только на платформах POSIX (то есть не на Windows и Android)
Устанавливает идентификацию пользователя процесса. (См. setuid(2).) Принимает числовой идентификатор или строку имени пользователя. Если указано имя пользователя, этот метод блокируется во время преобразования в числовой идентификатор.
if (process.getuid && process.setuid) {
console.log(`Current uid: ${process.getuid()}`);
try {
process.setuid(501);
console.log(`New uid: ${process.getuid()}`);
}
catch (err) {
console.log(`Failed to set uid: ${err}`);
}
}
process.stderr
Поток для записи в stderr (на файловом дескрипторе 2).
process.stderr и process.stdout отличаются от других потоков Node.js тем, что их нельзя закрыть (end() вызовет ошибку), они никогда не генерируют событие finish, и запись может блокироваться при перенаправлении вывода в файл (хотя диски быстрые, и операционные системы обычно используют кэширование записи, поэтому это должно происходить очень редко).
Кроме того, process.stderr и process.stdout блокируются при выводе на TTY (терминалы) в OS X в качестве обходного решения для очень маленького буфера ОС (1 КБ). Это делается для предотвращения переплетения stdout и stderr.
process.stdin
Поток для чтения со стандартного ввода (на файловом дескрипторе 0).
Пример открытия стандартного ввода и прослушивания событий:
process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
var chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write(`data: ${chunk}`);
}
});
process.stdin.on('end', () => {
process.stdout.write('end');
});
В качестве потока process.stdin также может использоваться в «старом» режиме, совместимом со скриптами, написанными для Node.js до версии 0.10. Для получения дополнительной информации см. Совместимость потоков.
В режиме «старых» потоков поток stdin приостановлен по умолчанию, поэтому необходимо вызвать process.stdin.resume() для чтения из него. Также обратите внимание, что вызов самого process.stdin.resume() переключит поток в «старый» режим.
Если вы начинаете новый проект, вы должны предпочесть более новый режим «new» потоков режиму «old».
process.stdout
Объект Writable Stream в stdout (в файловом дескрипторе 1).
Например, эквивалент console.log может выглядеть так:
console.log = (msg) => {
process.stdout.write(`${msg}\n`);
};
process.stderr и process.stdout отличаются от других потоков в Node.js тем, что их нельзя закрыть (end() вызовет ошибку), они никогда не испускают событие 'finish', и записи могут блокироваться при перенаправлении вывода в файл (хотя диски быстрые, и операционные системы обычно используют кэширование записи в обратной последовательности, поэтому это должно произойти очень редко).
Кроме того, process.stderr и process.stdout блокируются при выводе в TTY (терминал) в OS X в качестве обходного решения для очень маленького буфера ОС размером 1 КБ. Это предотвращает перемежение между stdout и stderr.
Чтобы проверить, выполняется ли Node.js в контексте TTY, обратитесь к свойству isTTY у process.stderr, process.stdout, или process.stdin:
$ node -p "Boolean(process.stdin.isTTY)" true $ echo "foo" | node -p "Boolean(process.stdin.isTTY)" false $ node -p "Boolean(process.stdout.isTTY)" true $ node -p "Boolean(process.stdout.isTTY)" | cat false
См. документацию по tty для получения дополнительной информации.
process.title
Геттер/сеттер для установки того, что отображается в ps.
При использовании в качестве сеттера максимальная длина зависит от платформы и, вероятно, невелика.
В Linux и OS X она ограничена размером имени бинарного файла плюс длиной аргументов командной строки, так как она перезаписывает память argv.
В версии v0.8 допускались более длинные строки названия процесса путём перезаписи памяти environ, но в некоторых (довольно редких) случаях это могло быть небезопасно/непонятно.
process.umask([mask])
Устанавливает или считывает маску создания режима файла процесса. Потомки наследуют маску от родительского процесса. Возвращает старую маску, если задан аргумент mask, в противном случае возвращает текущую маску.
const newmask = 0o022;
const oldmask = process.umask(newmask);
console.log(
`Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`
);
process.uptime()
Количество секунд, в течение которых работает Node.js.
process.version
Встроенное свойство, которое раскрывает NODE_VERSION.
console.log(`Version: ${process.version}`);
process.versions
Свойство, раскрывающее строки версий Node.js и его зависимостей.
console.log(process.versions);
Выведет что-то вроде:
{ http_parser: '2.3.0',
node: '1.1.1',
v8: '4.1.0.14',
uv: '1.3.0',
zlib: '1.2.8',
ares: '1.10.0-DEV',
modules: '43',
icu: '55.1',
openssl: '1.0.1k' }
© 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-v4.x/docs/api/process.html