258

Node.js を使用するのはこれが初めてで、次の問題に遭遇しました。

IDE のプラグインを使用してノード サーバーを起動しました。残念ながら、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 サーバーを起動しようとしたときに、既に Node サーバーが起動されているためです。

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

4

17 に答える 17

577

Windows マシン:

Node.js サーバーを強制終了する必要があり、他の Node プロセスが実行されていない場合は、マシンに という名前のすべてのプロセスを強制終了するように指示できます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) パラメータをコマンドに追加します。


MacOS マシン:

プロセスはほぼ同じです。マシン上で実行されているすべての Node プロセスを強制終了することができます。

killall node

または、@ jacob-groundwater の以下の回答で言及されているように、ポートでリッスンしているプロセスの PIDをlsof見つけることができます (-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
于 2013-02-09T19:56:31.757 に答える
54

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

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

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極端な偏見で終了します。

于 2013-02-09T20:07:28.947 に答える
8

これを試すことができます:

taskkill /IM node.exe -F
于 2014-01-28T13:35:57.227 に答える
3

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

killall nodejs

于 2017-01-04T14:11:00.087 に答える
0

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

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

試す

taskkill /im node.exe
于 2017-06-21T11:54:33.677 に答える