Яка команда використовується для виходу? (тобто завершити процес Node.js)
Яка команда використовується для виходу? (тобто завершити процес Node.js)
Відповіді:
Виклик методу глобального processоб'єкта exit:
process.exit()
process.exit ([код])
Закінчується процес вказаним
code. Якщо цей пункт пропущено, для виходу використовується код "успіх"0.Щоб вийти з кодом "провал":
process.exit(1);Оболонка, що виконувала вузол, повинна бачити код виходу як
1.
exitзовсім не вводить в оману. Вас бентежить, як працює Вузол. Подумайте про Node як про сам сервер. Це не просто запускається за потребою, як PHP знаходиться на веб-сервері, як Apache. Вузол взагалі не повинен мати нічого спільного з веб-серверами! Це просто хост для деякого JavaScript, з чудовими вбудованими бібліотеками для корисних справ.
mod_phpабо використовувати Apache. Ви можете повторно реалізувати httpd у PHP, як node, якщо ви дійсно хочете або використовуєте більш здоровий / стандартизований підхід, як FastCGI, як ви можете у вузлі.
process.exit()це не рекомендується , як описано у цій відповіді нижче .
Просто до відома , що використання process.exit([number])є не рекомендується практика.
Виклик
process.exit()змусить процес вийти якнайшвидше, навіть якщо є ще асинхронні операції, що очікують на розгляд, які ще не завершилися повністю, включаючи операції вводу / виводу доprocess.stdoutтаprocess.stderr.У більшості ситуацій
process.exit()явно телефонувати не потрібно . Процес Node.js завершиться самостійно, якщо в циклі подій не очікується додаткова робота.process.exitCodeВластивість може сказати процес, вихід код для використання , коли процес завершується коректно.Наприклад, наступний приклад ілюструє зловживання цього
process.exit()способу , який може привести до даних , надрукованих вstdoutусікається і втратив:// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }Причина цього проблемна в тому, що записування
process.stdoutв Node.js іноді є асинхронним і може виникати через декілька тиків циклу подій Node.js.process.exit()Однак виклик змушує процес вийти до того, якstdoutможна буде виконати ці додаткові записи .Замість того, щоб
process.exit()безпосередньо телефонувати , код повинен встановлюватиprocess.exitCodeта дозволяти процесу виходити природним шляхом, уникаючи планування будь-яких додаткових робіт для циклу подій:// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()і призначене.
З офіційної документації на nodejs.org :
process.exit(code)
Закінчується процес вказаним кодом. Якщо цей пункт пропущено, для виходу використовується код "успіх" 0.
Щоб вийти з кодом "провал":
process.exit(1);
code = 0; process.exit(code);
code?
process.exit()без параметра, оскільки код за замовчуванням до 0
process.exit(0);і запустите його, node exit_0.js && echo 'success'він скаже "успіх". Якщо ви створите exit_1.js за допомогою process.exit(1);та запустіть, node exit_1.js && echo 'success'це не скаже "успіх", оскільки ваш процес закінчився з нульовим значенням (що вказує на "збій" або "ненормальний вихід" в оболонку). Крім того, ви побачите різні значення в тому $?випадку, якщо ви запускаєте node exit_1.jsvs node exit_0.js(ви можете перевірити, зробивши, node exit_1.jsа потім зробивши echo $?).
Якщо ви знаходитесь в терміналі Unix або командному рядку Windows і хочете вийти з вузла REPL, будь-який ...
.exitі натисніть Enter, абоnodeREPL Ctrl + D для виходу є стандартною поведінкою, тому він також працює в Windows.
З командного рядка .exitви хочете:
$ node
> .exit
$
Це задокументовано в документах REPL . REPL (Read-Eval-Print-Loop) - так називається командний рядок Node.
У звичайній програмі використовуйте process.exit([code]).
Це залежить від причини, чому ви готові вийти з процесу node.js, але в будь-якому випадку process.exit()це останній варіант, який слід розглянути . Цитата з документації:
Важливо зауважити, що виклик
process.exit()змусить процес вийти якнайшвидше, навіть якщо очікують ще асинхронні операції, які ще не завершені повністю, включаючи операції вводу / виводу доprocess.stdoutтаprocess.stderr.У більшості ситуацій
process.exit()явно телефонувати не потрібно . Процес Node.js вийде самостійно, якщо в циклі подій не очікується додаткова робота.process.exitCodeВластивість може сказати процес, вихід код для використання , коли процес завершується коректно.
Розкриємо можливі причини, через які ви могли б вийти з процесу node.js і чому вам слід уникати process.exit():
Якщо скрипт досяг свого кінця, а інтерпретатор вузла не виходить, це вказує на те, що деякі операції з асинхронізацією ще тривають. На process.exit()цьому етапі неправильно змушувати припиняти процес . Краще спробувати зрозуміти, що стримує вихід сценарію очікуваним чином . І коли ви вирішите це, ви можете використовувати process.exitCodeдля повернення будь-якого результату до процесу виклику.
Наприклад, якщо ви готові виграшно вимкнути експрес- додаток. На відміну від сценарію командного рядка, експрес-додаток нескінченно працює, чекаючи нових запитів. process.exit()тут буде поганим варіантом, оскільки він перерве всі запити, які знаходяться на стадії розробки. І деякі з них можуть бути неідентичними (ОНОВЛЕННЯ, УДАЛИТИ). Клієнт ніколи не дізнається, чи завершено ці запити на стороні сервера, і це може бути причиною невідповідності даних між клієнтом і сервером. Єдине хороше рішення - сказати http-серверу припинити приймати нові запити і чекати, поки ті, що очікують, закінчать server.close():
var express = require('express');
var app = express();
var server = app.listen(80);
process.on( 'SIGTERM', function () {
server.close(function () {
console.log("Finished all requests");
});
});
Якщо вона все ще не виходить - див. Справа 1.
Завжди краще до throwпомилки, ви отримаєте добре відформатоване трасування стека та повідомлення про помилку. Верхній рівень коду завжди може вирішити, чи можуть вони обробити помилку ( catch) чи дозволити їй руйнувати процес. З іншого боку, process.exit(1)процес мовчки припиниться, і шансів на відновлення після цього не буде. Це може бути єдиною «перевагою» process.exit(), ви можете бути впевнені, що процес буде припинено.
Process.exit()схоже на великий надлишок для більшості програм. Я шукав еквівалент функції php's die () ... більше на кшталт:throw new Error('die msg')
REPL (командний рядок)
Натисніть ctrl + c двічі
Введіть .exitта натисніть клавішу Enter
Файл сценарію
process.exit(code)
Вузол зазвичай виходить з кодом 0 коли не очікується більше операцій з асинхронізацією.
process.exit(1) слід використовувати для виходу з кодом відмови. Це дозволить нам зробити висновок про те, що вузол не закрився витончено і був змушений закритися.
Існують і інші вихідні коди на кшталт
3 - Внутрішня помилка розбору JavaScript (дуже дуже рідко)
5 - Фатальна помилка в двигуні javascript v8
9 - Неправильний аргумент
Повний список див. У кодах виходу вузлів
У мене є програма, яку я хотів:
Мені довелося підключитися process.exit(code)до exitобробника подій, інакше пошта не буде відправлена, оскільки дзвінок process.exit(code)безпосередньо вбиває асинхронні події.
#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
to: 'Dave Bowman',
from: 'HAL 9000',
subject: 'Sorry Dave',
html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });
process.exitCodeна роботу в інструмент командного рядка, який я будую (протестований на Node v4.3.0). Але я не міг змусити його поводитись як задокументовано. Це дуже добре могло бути кращим випадком commander- хоча github.com/tj/commander.js/… змушує мене замислитися. Не впевнений, чи бачив хтось інший цю проблему без вузла 4, але документував про всяк випадок для подальшого використання.
process.exitCode = 1, процес закінчується кодом 0.
Як зазначав @Dominic, кидати невиконану помилку - це краща практика замість виклику process.exit ([код]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
Для виходу
let exitCode = 1;
process.exit(exitCode)
Корисні коди виходу
1 - Catchall для загальних помилок 2 - Неправильне використання вбудованих оболонок (згідно документації Bash) 126 - Команда, яку викликається, не може виконати 127 - "команда не знайдена" 128 - Недійсний аргумент для виходу 128 + n - фатальний сигнал помилки “n” 130 - Сценарій, скасований Control-C 255 \ * - Вихід із поза діапазону
З коду ви можете використовувати process.exit([errorcode])де [errorcode]необов’язкове ціле число ( 0за замовчуванням вказує на успіх).
Якщо ви використовуєте цикл друку Read Eval (REPL) , ви можете використовувати Ctrl+ Dабо ввести.exit
Крім того, в Windows або Linux можна використовувати Ctrl+ C, Ctrl+C
У Mac команда Ctrl+ Z, Ctrl+Z
node --version v0.10.18
Натисніть Ctrl + Cдвічі або .exit.
>
(To exit, press ^C again or type .exit)
>
Мені вдалося змусити всі мої вузлові процеси померти безпосередньо з оболонки Git Bash в Windows 10, набравши taskkill -F -IM node.exe- це закінчує всі процеси вузлів на моєму комп’ютері одразу. Я виявив, що також можу скористатися taskkill //F //IM node.exe. Не впевнений, чому обидва -і //працюють у цьому контексті. Сподіваюся, це допомагає!
Оскільки процес є глобальним об'єктом, вам не потрібно імпортувати жоден модуль. Наступна функція закриває або вбиває поточний процес вузла.
process.exit (код)
process.kill (process.pid)
process.abort ()
Відкрийте термінал командного рядка, де працює програма вузла, і натисніть Ctrl + C
якщо ви хочете вийти з програми js вузла з коду,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
якщо ви хочете вийти з програми njs js, тоді пишіть
process.exit(1)
у вашому коді
Якщо ви хочете змусити цикл виконання зупинити процес, yo може використовувати глобальний змінний процес, який є примірником EventEmitter . Тож, коли ви викликаєте process.exit (), ви фактично випромінюєте подію виходу, яка закінчує всі завдання негайно, навіть якщо все ще існують асинхронні операції.
process.exit () приймає в якості параметра вихідний код (Integer). Код 0 за замовчуванням, це означає, що він виходить із «успіхом». У той час як код 1 означає, що він виходить із "провалом".
Якщо ви перебуваєте в Windows, перейдіть до диспетчера завдань, потім перейдіть до процесів, шукайте процес під назвою "вузол", потім натискайте на нього правою кнопкою миші та натисніть опцію "Завершити процес".
Ви можете використовувати функцію process.exit ([код]) .
Якщо ви хочете вийти без "відмови", ви використовуєте код 0:
process.exit(0);
Для виходу з кодом "відмови" 1ви можете запустити:
process.exit(1);
Код "відмови" відмови характерний для програми. Тож ви можете використовувати для цього свої власні умовності.
end()запит. Інакше він просто зависне.