node.jsサーバーのすべてのインスタンスを停止します


186

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からノードサーバーを起動しようとしたときに、既にノードサーバーが起動しているためです。

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


1
申し訳ありませんが、私はWindows環境を使用していると述べています。関連するコマンドを投稿してください。ありがとう
キランアンバティ2013

そして、あなたはあなたのウィンドウズタスクマネージャーでnode.jsタスクを見つけることができます。Node.js:Server-sideという名前の進行状況を見つけて、その詳細情報を開きます。nodejsの進行状況のpidと詳細が表示されます
Xiuying Lan

これは私のために働いたものです:superuser.com/questions/1183057/…–
不明

回答:


422

Windowsマシン:

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

taskkill /im node.exe

そして、プロセスがまだ持続している場合は、/fフラグを追加することでプロセスを強制的に終了できます。

taskkill /f /im node.exe

より細かい制御が必要で、特定のポートで実行されているサーバーのみを強制終了する必要がある場合は、を使用netstatしてプロセスIDを検索し、それに強制終了信号を送信できます。したがって、ポートがであるあなたの場合、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)パラメータをコマンドに追加するだけです。


Linuxマシン:

プロセスはほとんど同じです。マシンで実行されているすべてのノードプロセスを強制終了できます(不十分な-$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フラグを使用します。これはaでSIGTERMあり、無視できません。

$ kill -9 1073

1
すみません、これらのコマンドはどのように使用できますか?process.exit()はコード内にある可能性がありますか?しかし、サーバーはすでに起動しています。コマンドnode app.jsで開始され、node-dev app.jsでは開始されない可能性があります。そして「node killall」は機能していません。私はそれを間違っていますか?ありがとう
キランアンバティ2013

1
process.exit()アプリケーションでNodeJSインスタンスを閉じます。killall nodebashでは、マシンで実行されているすべてのNodeJSインスタンスが強制終了されます。
ヘキサシアニド2013

@hexacyanideに感謝します。Windowsで開発しています。コマンドラインからは使用できないため、killallノードは無効なコマンドになりますか?
キランアンバティ2013

3
お試しくださいtaskkill /IM node.exe。という名前のすべてのプロセスを強制終了しますnode.exe
ヘキサシアニド2013

1
私はそれを機能させるためにtaskkill / F / IM node.exeを使用する必要がありました、ありがとう!
Luis

75

最速の方法は

killall node

Linux、OS Xで動作


簡単な方法ですが、他のアプリケーションが実行されている場合は、より具体的にする必要があります。
Rajeev Uppala

私にはうまくいきません。node: no process foundまた、特定のポートで実行されるノードプロセスに対してgrepを実行すると、プロセスID -自体に番号ではなくプロセスIDが表示されます。
Giorgi Gvimradze

49

lsof必要なポートにバインドされているgetプロセスを使用できます。

残念ながらフラグはシステムによって異なるようですが、Mac OS Xでは実行できます

lsof -Pi | grep LISTEN

たとえば、私のマシンでは次のようになります。

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

2番目の番号はPIDであり、それらがリッスンしているポートは、 "(LISTEN)"の直前にあります。不正なPIDを見つけて、kill -9 $PID極端な偏見で終了します。


こんにちはジェイコブ。私はWindowsで開発しているので、回答を編集してWindowsバージョンを追加してください。ありがとう
キランアンバティ2013

私はWindowsでそれを行う方法がわかりません。
Jacob地下水

これは素晴らしい回答です。特に、異なるポートで実行されている複数のノードサーバーがある場合はそうです。各ポートで実行されているプロセスIDを簡単に区別できます。
modulitos 2014年

25

WindowsとGitBashターミナル Windows / Webstorm / GitBashターミナル内でこのコマンドを使用する必要がありました

cmd "/C TASKKILL /IM node.exe /F"

3
これは私のためにそれをやった。ありがとう
Adim Victor

1
これも私のためにやった。Windowsですべてのノードプロセスを強制終了する最も速い方法を見つけました。
アサド

16

特定のノードプロセスを強制終了する場合は、コマンドラインルートに移動して次のように入力します。

ps aux | grep node

すべてのノードプロセスIDのリストを取得します。これで、プロセスid(pid)を取得できます。

kill -9 PID

すべてのノードプロセスを強制終了する場合は、次のようにします。

killall -9 node

-9スイッチは、Windowsの終了タスクのようなものです。プロセスを強制的に終了します。できるよ:

kill -l

killコマンドのすべてのスイッチとそのコメントを表示します。


8

あなたはこれを試すことができます:

taskkill /IM node.exe -F

7

Linux

友達を感心させる

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

しかし、これはあなたが覚えているものです

killall node


2

Windowsを使用している場合は、次の手順に従ってください。

  1. タスクマネージャーを開き、次のプロセスを探します。 Nodeプロセスを示すタスクマネージャー-Node.jsサーバー側JavaScript

  2. 次に、右クリックして「タスクを終了」します。

  3. 以上で、すべてのnpmコマンドが最初から実行されます。


1

マルチプラットフォーム、安定した、最高のソリューション:

あなたのポートを取っているプロセスを殺すためにfkillを使用してください:

fkill -f :8080

fkillをインストールするには、次のコマンドを使用します。npm i -g fkill


1

あなたが試すことができます

killall node

あなたも試すことができます

killall nodejs

これらのコマンドはすでに複数回投稿されています。もう一度投稿してもかまいませんが、他の人がそれを学べるように、少なくともいくつかの説明を回答に追加する必要があります
Nico Haase


0

Windowsオペレーティングシステムを使用しています。

すべてのノードプロセスを強制終了し、機能していたアプリを再起動しました。

試す

taskkill /im node.exe

0

次のコマンドを使用して、バッチファイルからノードサーバーを強制終了して再起動します。

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

cmdまたはbashを押します:Ctrl + C


これは、ノードプロセスが実行されているターミナルビューでのみ機能し、プロセスを強制終了することも保証しません。
Adrianによるデザイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.