334

ポートをリッスンする単純な TCP サーバーがあります。

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

Mac では Ctrl + Z で開始してnode server.jsから閉じます。で再度実行しようとすると、次のnode server.jsエラー メッセージが表示されます。

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

プログラムを間違った方法で閉じていますか? どうすればこれを防ぐことができますか?

4

19 に答える 19

413

Ctrlプログラムを終了するには、 +を使用する必要がありますC。これSIGINTにより、プログラムが正常に終了し、リッスンしているポートからバインドが解除されます。

参照: https://superuser.com/a/262948/48624

于 2012-05-09T19:16:53.357 に答える
367

Ctrl+Z一時停止します。これは、引き続き実行できることを意味します。

Ctrl+Cは実際にそれを殺します。

次のように手動で強制終了することもできます。

ps aux | grep node

プロセスIDを見つけます(左から2番目):

kill -9 PROCESS_ID

これも機能する可能性があります

killall node
于 2012-05-09T19:21:46.607 に答える
39

または、これらすべてを 1 行で実行することもできます。

kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')

「\snode\s」内のノードを他のプロセス名に置き換えることができます。

于 2014-09-22T15:17:29.760 に答える
21

Node.js をインタラクティブに実行している場合 (REPL):

Ctrl+Cで > プロンプトに戻り、次のように入力します。

process.exit()

または単にCtrl+を使用しますD

于 2014-02-15T07:54:25.160 に答える
17

$ sudo killall node別の端末ではmacで動作しますが、動作してkillall nodeいません:

$ killall node
No matching processes belonging to you were found
于 2013-06-18T12:53:26.210 に答える
6

これは遅い答えですが、NodeJS docsからこれを見つけました:

.exit'exit' イベントは、コマンドを入力として受信するか、ユーザーが<ctrl>-C2 回押して SIGINT を通知するか<ctrl>-D、入力ストリームで 'end' を通知するために押して、REPL が終了したときに発行されます。リスナー コールバックは、引数なしで呼び出されます。

要約すると、次の方法で終了できます。

  1. nodejs .exitREPL を入力します。
  2. 二度押し<ctrl>-C
  3. を押し<ctrl>-Dます。
  4. process.exit(0)REPL からの自然な終了を意味します。他のステータスを返したい場合は、ゼロ以外の数値を返すことができます。
  5. process.kill(process.pid)コード内またはREPLからnodejs APIを使用して強制終了する方法です。
于 2016-09-22T16:41:06.670 に答える
5

またはこのようなものでサーバーを停止したい場合npm stop。サーバー プロセスを強制終了するコードは、次のように記述できます。

require('child_process').exec(`kill -9 ${pid}`)

詳細については、このリンクを確認してください: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5

于 2016-01-31T03:06:12.807 に答える