これが私が初めて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サーバーが既に起動されているからです。
それで、知りたいのですが、どうすればすべてのサーバーインスタンスを停止できますか?また、ポート上で実行されているものを検出してそれを強制終了する方法を私に教えてもらえれば。
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)パラメータを追加するだけです。
プロセスはほぼ同じです。マシン上で実行されているすべてのNodeプロセスを強制終了することもできます(SIGKILL
が不十分な場合は-$SIGNAL
を使用してください)。
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
プロセスが終了を拒否した場合は、単にSIGTERM
である-9
フラグを使用してください。無視することはできません。
$ kill -9 1073
最速の方法は
killall node
Linux、OS Xで動作します
lsof
を使用して、必要なポートにバインドされているプロセスを取得できます。
残念ながら、フラグはシステムによって異なりますが、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&GitBash端末私はWindows/Webstorm/GitBash端末の中でこのコマンドを使う必要がありました
cmd "/C TASKKILL /IM node.exe /F"
特定のプロセスを強制終了したい場合は、コマンドラインルートに進むことができます。
ps aux | grep node
プロセスIDを取得してから
kill -9 PID
そして、あなたがすべてのプロセスを殺したいのであれば、そうしてください:
killall -9 node
これを試すことができます:
taskkill /IM node.exe -F
あなたも試すことができます:
killall nodejs
あなたが窓を使っているならば、これに従ってください:
1)タスクマネージャを開き、このプロセスを探します。 http://prntscr.com/kv3uqx
2)それからちょうどそれを「タスクの終了」と右クリックしてください。
3)以上で、すべてのnpmコマンドが最初から実行されます。
誰かに役立つことを願っています!
乾杯
あなたが試すことができます
killall node
あなたも試すことができます
killall nodejs
マルチプラットフォーム、安定、最良の解決策:
fkillを使ってあなたのportを取っているプロセスをkillします。
fkill -f :8080
Fkillをインストールするには、次のコマンドを使用します。npm i -g fkill
windows 10で正常に動作します
taskkill /f /im node.exe
Windowsオペレーティングシステムを使用しています。
私はすべてのノードプロセスを強制終了し、それが機能するアプリを再起動しました。
やってみる
taskkill /im node.exe
友達を感動させる
ps aux | grep -i node | awk '{print $2}' | xargs kill -9
しかし、これはあなたが覚えているものです
killall node
次のコマンドを使用して、バッチファイルからノードサーバーを強制停止して再起動します。
@echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF