終了に使用されるコマンドは何ですか? (Node.jsプロセスを終了します)
公式の nodejs.org ドキュメントから:
process.exit(code)
指定されたコードでプロセスを終了します。省略した場合、exitは「成功」コード0を使用します。
「失敗」コードで終了するには
process.exit(1);
Unix端末かWindowsのコマンドラインを使用していてNode REPLを終了したい場合は、どちらか...
.exit
を入力してEnterキーを押す、またはprocess.exit([number])
を使うことは お勧めできません プラクティスです。
保留中の非同期操作がまだ完全に完了していない場合でも、process.exit()を呼び出すと、可能な限り早くプロセスを終了させることができます。 process.stdoutおよびprocess.stderr。
ほとんどの場合、 process.exit()を明示的に呼び出す必要はありません。 イベントループで保留中の追加の作業がない場合、Node.jsプロセスは自分自身で終了します。 process.exitCodeプロパティを設定すると、プロセスが正常に終了したときにどの終了コードを使用するかをプロセスに指示できます。
例えば、次の例は、 process.exit()メソッドの 誤用 を示しています。このメソッドは、標準出力に印刷されたデータが切り捨てられて失われる可能性があります。
// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
これが問題になるのは、Node.jsのprocess.stdoutへの書き込みが非同期に行われることがあり、 Node.jsイベントループの複数ティックにわたって発生する可能性があるためです。ただし、process.exit()を呼び出すと、標準出力への追加の書き込みが実行される前にプロセスが強制終了されます。
Process.exit()を直接呼び出すのではなく、コードは process.exitCodeを設定し、イベントループのための追加作業のスケジューリングを回避することによってプロセスが自然に終了できるようにする必要があります。
// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
コマンドラインから、.exit
はあなたが欲しいものです:
$ node
> .exit
$
これは REPL docs に文書化されています。 REPL(読み取り - 評価 - 印刷 - ループ)は、Nodeコマンドラインが呼び出されるものです。
通常のプログラムでは、 process.exit([code])
を使用してください。
それは、node.jsプロセスを終了したい理由によりますが、いずれにせよprocess.exit()
はを考慮する最後のオプションです。ドキュメントからの引用:
保留中の非同期操作がまだ完全に完了していない場合でも、
process.exit()
を呼び出すとプロセスができるだけ迅速に終了することに注意することが重要です。process.stdout
およびprocess.stderr
に対する/ O操作。ほとんどの場合、
process.exit()
を明示的に呼び出す必要は実際にはありません。イベントループで保留中の追加の作業がない場合、Node.jsプロセスは自分自身で終了します。process.exitCode
プロパティは、プロセスが適切に終了するときにどの終了コードを使用するかをプロセスに指示するように設定できます。
Node.jsプロセスを終了したい理由とprocess.exit()
を避けなければならない理由を考えてみましょう。
スクリプトが終了し、ノードインタプリタが終了しない場合は、一部の非同期操作がまだ保留中であることを示しています。現時点でprocess.exit()
でプロセスを強制終了するのは間違っています。 スクリプトが予期した方法で終了しないようにしているもの を理解することをお勧めします。そしてこれを解決したら、process.exitCode
を使って結果を呼び出し元のプロセスに返すことができます。
たとえば、expressapp)を正常にシャットダウンしたい場合は、express appを無限に実行し続け、新しい要求を待ちます。すべての要求を中断するため、ここではprocess.exit()
を使用することをお勧めします。そして、それらのいくつかは冪等ではないかもしれません(UPDATE、DELETE)クライアントはそれらの要求が完了したかどうかを決してサーバー側で知りませんし、それはクライアントとサーバー間のデータ不整合の理由かもしれません良い解決策は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()
の唯一の「恩恵」であるかもしれません、あなたはプロセスが終了することを確実にすることができます。
REPL(コマンドライン)
ctrl + c
2回を押す
.exit
と入力してEnterキーを押します
スクリプトファイル
process.exit(code)
保留中の非同期操作がなくなると、ノードは通常code 0で終了します。
process.exit(1)
を使用して失敗コードで終了する必要があります。これにより、ノードが正常に閉じられずに強制的に閉じられたことを推測できます。
のような他の終了コードがあります
3 - 内部JavaScript解析エラー(非常にまれ)
5 - v8 JavaScriptエンジンでの致命的エラー
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); });
Ctrl + C
をまたは.exit
を2回押します。
>
(To exit, press ^C again or type .exit)
>
コードからprocess.exit([errorcode])
を使用できます。ここで[errorcode]
はオプションの整数です(0
は成功を示すデフォルトです)。
Read Eval Print Loop(REPL) を使っているのなら、 Ctrl + Dまたは.exit
と入力
あるいは、WindowsまたはLinuxでは、次のものを使用できます。 Ctrl + C、 Ctrl + C
Macでは、コマンドは Ctrl + Z、 Ctrl + Z
@Dominicが指摘したように、 キャッチされていないエラーをスローする は、 process.exit([code]) を呼び出すよりも良い方法です。process.exitCode = 1;
throw new Error("my module xx condition failed");
出る
let exitCode = 1;
process.exit(exitCode)
便利な終了コード
[ - ____] 1 - 一般的なエラーに対するキャッチオール[ - ____] 2 - シェルビルトインの誤用(Bashのドキュメントによる)[ - ____] 126 - 呼び出されたコマンドを実行できない ] 127 - “ command not found” " 128 - 終了する引数が無効です。 128 + n - 致命的なエラー信号" n " ] 130 - Control-Cでスクリプトが終了しました 255\* - 終了ステータスが範囲外です
コマンドライン
CTRL + C を2回押す
OR
.exit
と入力してEnterキーを押します
スクリプトファイル
process.exit(code)
Windows 10上のGit Bashシェルから直接taskkill -F -IM node.exe
と入力すると、すべてのノードプロセスを直接停止させることができました。これで、コンピューター上のすべてのノードプロセスが一度に終了します。私はtaskkill //F //IM node.exe
も使えることがわかりました。なぜ-
と//
の両方がこのコンテキストで機能するのかわからない。お役に立てれば!
あなたがノードのJSアプリケーションから終了したい場合は、その後
process.exit(1)
あなたのコードで
プロセスはグローバルオブジェクトであるため、モジュールをインポートする必要はありません。次の関数は、現在のノードプロセスを終了または強制終了します。
process.exit(code)
process.kill(process.pid)
process.abort()
ノードアプリケーションが実行されているコマンドラインターミナルを開き、Ctrl + Cを押します
コードからノードjsアプリケーションを終了する場合、
process.exit(); // graceful termination
process.exit(1); // non graceful termination
実行ループにプロセスを強制的に停止させたい場合は、 EventEmitter のインスタンスであるグローバル変数 process を使用できます。したがって、 process.exit() を呼び出すと、非同期操作がまだ行われていなくても、実際にはすべてのタスクを直ちに終了する exit イベントが発行されます。
process.exit() はパラメータとして終了コード(Integer)を取ります。コード 0 がデフォルトであり、これは「成功」で終了することを意味します。コード 1 は「失敗」で終了することを意味します。
process.exit([code]) functionを使うことができます。
失敗せずに終了したい場合は、コード0
を使用します。
process.exit(0);
'failure'コード1
で終了するには、次のように実行します。
process.exit(1);
失敗の「失敗」コードはアプリケーションに固有のものです。それであなたはそれのためにあなた自身の規約を使うことができます。