1. ホーム
  2. ジャバスクリプト

[解決済み】node.jsサーバーの全インスタンスを停止する。

2022-04-04 13:12:57

質問

Node.jsを使うのは初めてですが、この問題にぶつかりました。

IDEのプラグインでNodeサーバーを立ち上げました。残念ながら、私はIDEのターミナルを使用することができません。そこで、私はコマンドラインからスクリプトを実行しようとしました。

これは問題です。私は Express モジュールを使用しており、私のアプリはあるポート(8080)をリッスンしています。コマンドラインからアプリを起動すると、このエラーが表示されます。

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

このエラーが何であるかはよくわからないのですが、アプリがすでに使用されているポートをリッスンしているためだと思いました。そこで、私はこうしました。

netstat -an

を見ることができます。

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

IDEから起動しようとしたら、すでにNodeサーバーが起動されていたためです。

そこで知りたいのですが、すべてのサーバーインスタンスを停止するにはどうすればよいのでしょうか?また、ポートで実行されているものを検出し、それを停止する方法も教えてください。

解決方法は?

Windowsマシンです。

Node.jsサーバーを終了させる必要があり、他のNodeプロセスを実行していない場合、以下の名前のプロセスをすべて終了させるようにマシンに指示することができます。 node.exe . それは次のようなものです。

taskkill /im node.exe

そして、それでもプロセスが持続する場合は、強制的にプロセスを終了させるために /f フラグを使用します。

taskkill /f /im node.exe

より細かい制御が必要で、特定のポートで動作しているサーバーだけを殺す必要がある場合は、次のようにします。 netstat でプロセスIDを見つけ、そこにkillシグナルを送ります。つまり、あなたの場合、ポートが 8080 を実行すると、次のようになります。

C:\>netstat -ano | find "LISTENING" | find "8080"

出力の5列目はプロセスIDです。

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

そして、そのプロセスを taskkill /pid 14828 . プロセスが終了することを拒否した場合、単に /f (force)パラメータをコマンドに追加します。


MacOSマシン。

処理内容はほぼ同じです。そのマシンで動いているNodeのプロセスを全て殺すかのどちらかです。

killall node

あるいはまた、言及されているように 以下の@jacob-groundwaterさんの回答です。 を使って lsof を使えば、あるポートでリッスンしているプロセスの PID を見つけることができます。 -i フラグとポートを指定することで大幅にスピードアップします)。

$ lsof -Pi :8080
COMMAND   PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     1073    urname   22u  IPv6  bunchanumbershere      0t0  TCP *:8080 (LISTEN)

この場合のプロセスIDは、PIDカラムの下にある数字で、これを kill コマンドを実行します。

$ kill 1073

もしプロセスが終了することを拒否した場合は、単に -9 フラグを使用します。 SIGTERM であり、無視できない。

$ kill -9 1073


Linuxマシンです。

ここでも、ほぼ同じような処理になります。そのマシンで動作している全てのNodeプロセスを終了させるか( -$SIGNAL もし SIGKILL が不十分な場合)。

killall node

または netstat で、あるポートでリッスンしているプロセスのPIDを見つけることができます。

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

この場合のプロセスIDは、6列目のプロセス名の前にある数字で、これを kill コマンドを実行します。

$ kill 1073

もしプロセスが終了することを拒否した場合は、単に -9 フラグを使用します。 SIGTERM であり、無視できない。

$ kill -9 1073