web-dev-qa-db-ja.com

Node.jsで終了する方法

終了に使用されるコマンドは何ですか? (Node.jsプロセスを終了します)

1526
George Bailey

グローバルの process objectの exit メソッドを呼び出します。

process.exit()

ドキュメントから:

process.exit([code])

指定されたcodeでプロセスを終了します。省略した場合、exitは '成功'コード0を使用します。

「失敗」コードで終了するには

process.exit(1);

ノードを実行したシェルは、終了コードを1と見なします。

1932
Pero P.

公式の nodejs.org ドキュメントから:

process.exit(code)

指定されたコードでプロセスを終了します。省略した場合、exitは「成功」コード0を使用します。

「失敗」コードで終了するには

process.exit(1);
342
alienhard

Unix端末かWindowsのコマンドラインを使用していてNode REPLを終了したい場合は、どちらか...

  • 押す Ctrl + C 2回
  • .exitを入力してEnterキーを押す、または
  • 押す Ctrl + D 行頭で(Unixのみ)
254
Mohsen

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;
}
244
Dominic

コマンドラインから、.exitはあなたが欲しいものです:

$ node
> .exit
$

これは REPL docs に文書化されています。 REPL(読み取り - 評価 - 印刷 - ループ)は、Nodeコマンドラインが呼び出されるものです。

通常のプログラムでは、 process.exit([code]) を使用してください。

113
Mike M. Lin

それは、node.jsプロセスを終了したい理由によりますが、いずれにせよprocess.exit()はを考慮する最後のオプションです。ドキュメントからの引用:

保留中の非同期操作がまだ完全に完了していない場合でも、process.exit()を呼び出すとプロセスができるだけ迅速に終了することに注意することが重要です。 process.stdoutおよびprocess.stderrに対する/ O操作。

ほとんどの場合、 process.exit()を明示的に呼び出す必要は実際にはありません。イベントループで保留中の追加の作業がない場合、Node.jsプロセスは自分自身で終了します。 process.exitCodeプロパティは、プロセスが適切に終了するときにどの終了コードを使用するかをプロセスに指示するように設定できます。

Node.jsプロセスを終了したい理由とprocess.exit()を避けなければならない理由を考えてみましょう。

ケース1 - 実行完了(コマンドラインスクリプト)

スクリプトが終了し、ノードインタプリタが終了しない場合は、一部の非同期操作がまだ保留中であることを示しています。現時点でprocess.exit()でプロセスを強制終了するのは間違っています。 スクリプトが予期した方法で終了しないようにしているもの を理解することをお勧めします。そしてこれを解決したら、process.exitCodeを使って結果を呼び出し元のプロセスに返すことができます。

ケース2 - 外部シグナルによる終了(SIGINT/SIGTERM/other)

たとえば、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を参照してください。

ケース3 - 内部エラー

エラーをthrowにする方が常に良いでしょう、あなたはきれいにフォーマットされたスタックトレースとエラーメッセージを得るでしょう。上位レベルのコードは、エラー(catch)を処理できるかどうか、またはプロセスをクラッシュさせるかどうかを常に決定できます。反対に、process.exit(1)はプロセスを黙って終了させ、これから回復する機会はないでしょう。それがprocess.exit()の唯一の「恩恵」であるかもしれません、あなたはプロセスが終了することを確実にすることができます。

63
teq

REPL(コマンドライン)

  • ctrl + c2回を押す

  • .exitと入力してEnterキーを押します

スクリプトファイル

process.exit(code)

保留中の非同期操作がなくなると、ノードは通常code 0で終了します。

process.exit(1)を使用して失敗コードで終了する必要があります。これにより、ノードが正常に閉じられずに強制的に閉じられたことを推測できます。 

のような他の終了コードがあります

3 - 内部JavaScript解析エラー(非常にまれ)

5 - v8 JavaScriptエンジンでの致命的エラー

9 - 無効な引数

完全なリストは ノードの終了コードを見てください

23
Siva Prakash

私がしたいアプリケーションがあります。

  1. ユーザーにメールを送る
  2. エラーコードで終了する

私は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); });
12
Stephen Quan

Ctrl + Cをまたは.exitを2回押します。

> 
(To exit, press ^C again or type .exit)
> 
7
HeadAndTail

コードからprocess.exit([errorcode])を使用できます。ここで[errorcode]はオプションの整数です(0は成功を示すデフォルトです)。

Read Eval Print Loop(REPL) を使っているのなら、 Ctrl + Dまたは.exitと入力

あるいは、WindowsまたはLinuxでは、次のものを使用できます。 Ctrl + C、 Ctrl + C

Macでは、コマンドは Ctrl + Z、 Ctrl + Z

7
zzzzBov

@Dominicが指摘したように、 キャッチされていないエラーをスローする は、 process.exit([code]) を呼び出すよりも良い方法です。
process.exitCode = 1; throw new Error("my module xx condition failed");

7
MANN

出る

let exitCode = 1;
process.exit(exitCode)

便利な終了コード

[ -  ____] 1  - 一般的なエラーに対するキャッチオール[ -  ____] 2  - シェルビルトインの誤用(Bashのドキュメントによる)[ -  ____] 126  - 呼び出されたコマンドを実行できない
] 127  - “ command not found” "
 128  - 終了する引数が無効です。
 128 + n  - 致命的なエラー信号" n "
] 130  -  Control-Cでスクリプトが終了しました
 255\*  - 終了ステータスが範囲外です
6
Denis Lisitskiy

コマンドライン

CTRL + C を2回押す

OR

.exitと入力してEnterキーを押します

スクリプトファイル

process.exit(code)
3
Farhan Yaseen

Windows 10上のGit Bashシェルから直接taskkill -F -IM node.exeと入力すると、すべてのノードプロセスを直接停止させることができました。これで、コンピューター上のすべてのノードプロセスが一度に終了します。私はtaskkill //F //IM node.exeも使えることがわかりました。なぜ-//の両方がこのコンテキストで機能するのかわからない。お役に立てれば!

3
Alison Stuart

あなたがノードのJSアプリケーションから終了したい場合は、その後

process.exit(1)

あなたのコードで

0
Ajay Mudaliyar

プロセスはグローバルオブジェクトであるため、モジュールをインポートする必要はありません。次の関数は、現在のノードプロセスを終了または強制終了します。

process.exit(code)

process.kill(process.pid)

process.abort()

0
sumit_suthar

ノードアプリケーションが実行されているコマンドラインターミナルを開き、Ctrl + Cを押します

コードからノードjsアプリケーションを終了する場合、

process.exit(); // graceful termination 
process.exit(1); // non graceful termination 
0
Shekar Mania

ノードjsの終了は、2つの方法で行われます。

  • process.exit() を明示的に呼び出す。
  • あるいは、nodejsイベントループがすべてのタスクに対して行われていて、やるべきことが残っていない場合。その後、ノードアプリケーションは自動的に終了します。

使い方?

実行ループにプロセスを強制的に停止させたい場合は、 EventEmitter のインスタンスであるグローバル変数 process を使用できます。したがって、 process.exit() を呼び出すと、非同期操作がまだ行われていなくても、実際にはすべてのタスクを直ちに終了する exit イベントが発行されます。

process.exit() はパラメータとして終了コード(Integer)を取ります。コード 0 がデフォルトであり、これは「成功」で終了することを意味します。コード 1 は「失敗」で終了することを意味します。

0
majid jiji

process.exit([code]) functionを使うことができます。

失敗せずに終了したい場合は、コード0を使用します。

process.exit(0);

'failure'コード1で終了するには、次のように実行します。

process.exit(1);

失敗の「失敗」コードはアプリケーションに固有のものです。それであなたはそれのためにあなた自身の規約を使うことができます。

0