終了に使用されるコマンドは何ですか?(つまり、Node.jsプロセスを終了します)
終了に使用されるコマンドは何ですか?(つまり、Node.jsプロセスを終了します)
回答:
グローバルprocess
オブジェクトのexit
メソッドを呼び出します。
process.exit()
process.exit([コード])
指定されたでプロセスを終了します
code
。省略した場合、exitは「成功」コードを使用します0
。「失敗」コードで終了するには:
process.exit(1);
ノードを実行したシェルは、終了コードをと表示するはず
1
です。
exit
まったく誤解を招くものではありません。Nodeの動作について混乱しています。ノードをサーバー自体と考えてください。PHPはApacheのようなWebサーバー内にあるので、必要に応じて起動されるだけではありません。ノードは、Webサーバーとはまったく関係がありません!これはJavaScriptのホストにすぎず、便利なことを行うための気の利いた組み込みライブラリがいくつかあります。
mod_php
Apacheで実行したり、Apacheを使用したりする必要はありません。nodeのようにFastCGIのようなより健全で標準化されたアプローチが本当に必要な場合は、nodeと同様にPHPでhttpdを再実装できます。
process.exit()
されてお勧めできませんで説明したように、以下のこの答えを。
ただ、ノート使用していることがprocess.exit([number])
あるお勧めできません練習。
呼び出しは、
process.exit()
I / O操作を含むことは、まだ完全には完了していない保留中の非同期操作にはまだ存在していてもすぐに可能な限り終了までのプロセスを強制します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)
指定されたコードでプロセスを終了します。省略した場合、exitは「成功」コード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.js
対node exit_0.js
(あなたが実行して確認することができnode exit_1.js
、その後、やってecho $?
)。
UnixターミナルまたはWindowsコマンドラインを使用していて、ノードREPLを終了する場合は、次のいずれかを実行します。
.exit
し、Enterキーを押します、またはnode
REPLは、Ctrl + D出口までの標準的な動作であるので、それはまた、Windows上で動作します。
コマンドラインから、.exit
あなたが欲しいものです:
$ node
> .exit
$
REPL docsに記載されています。REPL(Read-Eval-Print-Loop)は、Nodeコマンドラインが呼び出されるものです。
通常のプログラムから、を使用しますprocess.exit([code])
。
それはあなたが終了Node.jsのプロセスに喜んでいる理由に依存するが、いずれにしてもprocess.exit()
ある考慮すべき最後のオプション。ドキュメントからの引用:
呼び出しがあることに注意することが重要である
process.exit()
I / O操作を含むことは、まだ完全には完了していない保留中の非同期操作にはまだ存在していてもすぐに可能な限り終了までのプロセスを強制しますprocess.stdout
とprocess.stderr
。ほとんどの場合、実際に
process.exit()
明示的に呼び出す必要はありません 。イベントループで保留中の追加の作業がない場合、Node.jsプロセスは独自に終了します。process.exitCode
プロパティは、終了コードが正常プロセスの終了時に使用するためのプロセスを伝えるために設定することができます。
node.jsプロセスを終了しても構わないと考えられる理由と、回避すべき理由について説明しますprocess.exit()
。
スクリプトが最後に到達し、ノードインタープリターが終了しない場合は、一部の非同期操作がまだ保留中であることを示しています。process.exit()
この時点ででプロセスを強制終了するのは誤りです。スクリプトが予期した方法で終了しない原因を理解することをお勧めします。そして、これを解決すると、process.exitCode
呼び出しプロセスに結果を返すために使用できます。
たとえば、Expressアプリを適切にシャットダウンする場合などです。コマンドラインスクリプトとは異なり、Expressアプリは無限に実行され続け、新しいリクエストを待ちます。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()
プロセスが終了することは確実です。
Process.exit()
ほとんどのアプリケーションにとって、大きなやり過ぎのように見えます。私はphpのdie()関数に相当するものを探していました...詳細:throw new Error('die msg')
REPL(コマンドライン)
2回押すctrl + c
入力.exit
してEnter キーを押します
スクリプトファイル
process.exit(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); });
process.exitCode
私が構築しているコマンドラインツール(Node v4.3.0でテスト済み)で動作するように、その日のかなりの部分を費やしました。しかし、私はそれをドキュメントどおりに動作させることができませんでした。これはcommander
、github.com / tj / commander.js /…の場合は非常に問題でした。他の誰かがこの問題をノード4で見たことがあるかどうかはわかりませんが、将来の参考のために文書化しておいてください。
process.exitCode = 1
、コード0でプロセスが終了
@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-「コマンドが見つかりません」 128-終了する引数が無効です 128 + n-致命的なエラー信号「n」 130-Control-Cによってスクリプトが終了しました 255 \ *-終了ステータスが範囲外です
コードからprocess.exit([errorcode])
、where [errorcode]
はオプションの整数を使用できます(0
成功を示すデフォルトです)。
あなたが使用している場合は読む評価がループ(REPL)を印刷し、あなたが使用することができますCtrl+ D、またはタイプ.exit
または、WindowsまたはLinuxではCtrl+ C、Ctrl+C
Macでは、コマンドはCtrl+ Z、Ctrl+Z
node --version
v0.10.18
Ctrl + C
またはを2回押し.exit
ます。
>
(To exit, press ^C again or type .exit)
>
入力することで、Windows 10のGit Bashシェルからすべてのノードプロセスを直接taskkill -F -IM node.exe
終了させることができました。これにより、コンピューター上のすべてのノードプロセスが一度に終了します。も使用できることがわかりましたtaskkill //F //IM node.exe
。なぜ両方わからない-
と//
、この文脈での作業。お役に立てれば!
プロセスはグローバルオブジェクトであるため、モジュールをインポートする必要はありません。次の関数は、現在のノードプロセスを終了または強制終了します。
process.exit(code)
process.kill(process.pid)
process.abort()
実行ループにプロセスを強制的に停止させたい場合は、EventEmitterのインスタンスであるグローバル変数プロセスを使用できます。そのため、process.exit()を呼び出すと、実際には、実行されていない非同期操作がある場合でも、すべてのタスクを即座に終了するexitイベントが発行されます。
process.exit()は、終了コード(整数)をパラメーターとして取ります。コード0がデフォルトであり、これは「成功」で終了することを意味します。コード1は「失敗」して終了することを意味します。
process.exit([code])関数を使用できます。
「失敗」せずに終了する場合は、コードを使用します0
。
process.exit(0);
「失敗」コードで終了するには、次のコマンドを1
実行します。
process.exit(1);
失敗の「失敗」コードはアプリケーションに固有です。したがって、独自の規則を使用できます。
end()
ます。それ以外の場合は、ハングアップします。