Node.js — Process

341

Від автора: об’єкт Node js Process є глобальним об’єктом і до нього можна отримати доступ з будь-якого місця. В об’єкті Process міститься кілька методів.

Події Process

Об’єкт Process є екземпляром EventEmitter і запускає наступні події:

Exit — Запускається при виході з процесу. В цей момент неможливо запобігти вихід з циклу подій, після того як всі прослушиватели виходу закінчаться, процес завершиться.

beforeExit — Це подія відбувається, коли node очищає цикл подій і на даний момент не існує інших подій, які повинні бути заплановані. Як правило, коли більше не існує запланованих завдань, здійснюється вихід з node, але слухач для «beforeExit» може виконувати асинхронні виклики і продовжувати роботу node.

uncaughtException — Запускається, коли в циклі подій знову і знову виникає виняток. Якщо для цього виключення додано слухач, дія за замовчуванням (яке має вивести результати поточної операції в стеку і завершити процес) виконуватися не буде.

Signal Events — Запускається, коли процеси отримують сигнал, такий як SIGINT, SIGHUP і т. д.

Приклад

Створіть файл з ім’ям js main.js з таким кодом для прослуховування події exit:

process.on(‘exit’, function(code) {
// Наступний код ніколи не буде виконаний.
setTimeout(function() {
console.log(“This will not run”);
}, 0);
console.log(‘About to exit with code:’, code);
});
console.log(“Program Ended”);

Тепер запустіть main.js:

$ node main.js

В результаті ви отримаєте наступне.

Program Ended
About to exit with code: 0

Коди виходу

Коли більше не виконуються асинхронних операцій, вихід з Node як правило, здійснюється з кодом стану 0. Нижче описані інші коди виходу:

1 Неустранимое виняток — Виникло неустранимое виключення, і воно не було оброблено обробником подій domain або uncaughtException.

2 Невикористаний — Зарезервовано Bash для вбудованих позаштатних ситуацій.

3 Внутрішня помилка парсинга JavaScript — Вихідний код JavaScript, вбудований в процес початкового завантаження Node, викликав помилку синтаксичного парсингу. Це трапляється вкрай рідко, і як правило при розробці самого Node.

4 Внутрішня помилка оцінки JavaScript — Вихідний код JavaScript, вбудований в процес початкового завантаження Node, не зміг повернути значення функції при оцінці. Це відбувається вкрай рідко, і як правило при розробці самого Node.

5 Критична помилка — V8 сталася критична невиправна помилка. Як правило, виводиться повідомлення у stderr з префіксом FATAL ERROR.

6 Внутрішній Non-function обробник виключень — Виникло необроблене виняток, але внутрішня функція обробника критичних винятків була якимось чином задана, як non-function і не могла бути викликана.

7 Збій внутрішнього обробника виключень — Виникло необроблене виняток, і сама внутрішня функція обробника критичних помилок видала помилку при спробі обробити його.

8 Невикористовуваний

9 Недійсний аргумент — Був вказаний або невідомий параметр, або параметр, для якого має задаватися значення, був наданий без значення.

10 Внутрішня помилка виконання JavaScript — Вихідний код JavaScript, вбудований в процес початкового завантаження Node, викликав помилку при виклику функції початковій завантаження. Це трапляється вкрай рідко, і як правило при розробці самого Node.

11 Неправильний аргумент налагодження Були встановлені параметри —debug і/або —debug-brk, але при цьому був вказаний неправильний номер порту.

> 128 Сигнал виходу — Якщо Node отримує сигнал критичної помилки, такий як SIGKILL або SIGHUP, тоді його код виходу буде дорівнює 128 плюс значення коду сигналу. Це стандартна практика Unix, так як коди виходу визначені як 7-бітні цілі числа, а сигнали виходу мають більш високу розрядність.

Властивості процесу

Процес надає багато важливих властивостей, для кращого контролю системної взаємодії.

Stdout — Записуваний потік в stdout.

Stderr — Записуваний потік у stderr.

Stdin — Записуваний потік для stdin.

argv — Масив, що містить аргументи командного рядка. Перший елемент — «node», другий елемент — ім’я файлу JavaScript.Наступні елементи — будь-які додаткові аргументи командного рядка.

execPath — Це абсолютний шлях до виконуваного файлу, який запустив процес.

execArgv — Це набір специфічних для node параметрів командного рядка з виконуваного файлу, який запустив процес.

Env — Об’єкт, що містить для користувача середовище.

ExitCode — Число, яке є код виходу процесу, коли процес завершується коректно, або без зазначення коду, коли вихід здійснюється через process.exit().

Version — Скомпільований властивість, яка надає NODE_VERSION.

Versions — Властивість, що відображає рядки версії node і його залежностей.

Config — Об’єкт, що містить JavaScript-подання параметрів конфігурації, які використані для компіляції поточного виконуваного файлу node. Це те ж саме, що і файл config.gypi, який був створений при запуску скрипта ./configure.

pid — PID процесу.

title — Getter/setter, який визначає що виводити ‘ps’.

arch — якою процесорної архітектури ви працюєте: ‘arm’, ‘ia32’ або ‘x64’

platform — На якій платформі ви працюєте: ‘darwin’, ‘freebsd’, ‘linux’, ‘sunos’ або ‘win32’,

mainModule — Альтернативний спосіб вилучення require.main. Різниця полягає в тому, що якщо основний модуль змінюється під час виконання, require.main може посилатися на вихідний основний модуль в модулях, які повинні були підключитися до внесення змін. У загальному випадку можна з упевненістю припускати, що обидва вони належать до одного модуля.

Приклад

Створіть файл з ім’ям js main.js з таким кодом:

// Вивід на консоль
process.stdout.write(“Hello World!” + “\n”);
// Зчитування переданих параметрів
process.argv.forEach(function(val, index, array) {
console.log(index + ‘: ‘+ val);
});
// Отримання шляху до виконуваного файлу
console.log(process.execPath);
// Інформація про платформу
console.log(process.platform);

Тепер запустіть main.js:

$ node main.js

Ви повинні отримати наступний результат на комп’ютері Linux:

Hello World!
0: node
1: /web/com/1427106219_25089/main.js
/usr/bin/node
linux

Опис методів

Process надає безліч важливих методів для кращого контролю над взаємодією системи.

abort() — Вказує node запустити скасування. Вказує вийти з node і згенерувати файл ядра.

chdir(directory) — Змінює поточний робочий каталог процесу або генерує виключення, якщо це не вдається.

cwd() — Повертає поточний робочий каталог процесу.

exit() – Завершує процес з вказаним кодом. Якщо опустити параметр, exit використовує код «success» – 0.

getgid() – Отримує груповий ідентифікатор процесу. Це числовий ідентифікатор групи, а не ім’я групи. Ця функція доступна тільки для POSIX платформ (тобто не Windows, Android).

setgid(id) – Встановлює груповий ідентифікатор процесу. (Див. setgid(2)). Приймає або числовий ідентифікатор, або рядок groupname. Якщо вказано groupname, цей метод блокує виконання при обробці цифрового ідентифікатора. Ця функція доступна тільки для POSIX платформ (тобто не для Windows, Android).

getuid() – Отримує ідентифікатор користувача процесу. Це числовий ідентифікатор, а не ім’я користувача. Ця функція доступна тільки на POSIX платформах (тобто не Windows, Android).

setuid(id) – Встановлює ідентифікатор користувача процесу (див. Setgid(2)). Приймає або числовий ідентифікатор, або рядок username. Якщо вказано ім’я користувача, цей метод блокує виконання при обробці цифрового ідентифікатора. Ця функція доступна тільки для POSIX платформ (тобто не для Windows, Android).

getgroups() – Повертає масив з додатковими ідентифікаторами групи. POSIX залишає його невизначеним, якщо включений ефективний ідентифікатор групи, але node.js завжди надає його. Ця функція доступна тільки на POSIX платформах (тобто не Windows, Android).

setgroups(groups) – Задає додаткові ідентифікатори груп. Це операція потребує певних прав доступу і передбачає, щоб ви перебували в кореневому каталозі або мали змогу виконати CAP_SETGID. Ця функція доступна тільки для POSIX платформ (тобто не для Windows, Android).

initgroups(user, extra_group) – Зчитує /etc/group і ініціалізує список груп доступу, використовуючи всі групи, членом яких є користувач. Це операція, що вимагає певних прав доступу, яка передбачає, що ви повинні знаходитися в кореневому каталозі або мали змогу виконати CAP_SETGID. Ця функція доступна тільки для POSIX платформ (тобто не для Windows, Android).

kill(pid[, signal]) – Відправляє сигнал process. pid – ідентифікатор процесу, а signal – рядок, що описує надсилається сигнал. Імена сигналів – це рядки, такі як «SIGINT» або «SIGHUP». Якщо опустити параметр, сигнал за замовчуванням – «SIGTERM».

memoryUsage() – Повертає об’єкт, що описує використання пам’яті процесу Node, визначене в байтах.

nextTick(callback) – Після того як поточний цикл подій завершиться, викликає функцію зворотного виклику.

umask([mask]) – Встановлює або читає маску режиму створення файлу процесу. Дочірні процеси успадковують маску від батьківського процесу. Повертає стару маску, якщо задано аргумент mask, в іншому випадку повертає поточну маску.

uptime() – Час, що минув з моменту запуску Node в секундах.

hrtime() – Повертає поточний реальний час з високою точністю в масиві [секунди, наносекунди]. Воно вказується щодо довільного часу в минулому. Це не пов’язано з часом доби і тому переведення годинників на зимовий або літній час на нього не впливає. Основне використання – вимірювання продуктивності між інтервалами.

Приклад

Створіть файл з ім’ям js main.js з таким кодом:

// Виведення поточної директорії
console.log(‘Current directory:’ + process.cwd());
// Висновок версії process
console.log(‘Current version:’ + process.version);
// Висновок обсягу використовуваної пам’яті
console.log(process.memoryUsage());

Тепер запустіть main.js:

$ node main.js

В результаті ви повинні отримати наступне на комп’ютері Linux:

Current directory: /web/com/1427106219_25089
Current version: v0.10.33
{ rss: 11505664, heapTotal: 4083456, heapUsed: 2157704 }