エラーからlocalhostを解放する方法:EADDRINUSEをリッスンする


120

Windows 7でnodejsで記述されたサーバーをテストしています。コマンドラインでテスターを実行しようとすると、次のエラーが発生します

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

再起動せずにどうすれば修正できますか?


9
sudo killall node便利かもしれません
Hashir Hussain

回答:


101

これは、サーバーをバインドしようとしているアドレスが使用中であることを意味します。別のポートを試すか、そのポートを使用しているプログラムを閉じます。


ポート3000を使用して何も見つけることができませんでしたが、変更するとうまくいきました!
Dennis

7
この単一ノードプログラムは私のマシンでポート3000を使用する唯一のものであるため、ノードプロセスの以前のインスタンス化が適切にシャットダウンするのを妨げる何かが発生したことはかなり明らかなようです。使用node app.jsしてCtrl + Cで停止すると機能していましたが、初めて使用した後にEADDRINUSEの問題が発生し始めたnpm startため、Ctrl + C以外のものを使用してシャットダウンしたのが本当の解決策のようnpm startです。
David Mason

あなたのnpm startスクリプトは、複数のノードプログラム、またはバックグラウンドで実行した場合、またはプログラムがそのポートを使用して子プロセスを持っている可能性があるノードプログラムであるかもしれません。
fent

1
多くの場合、このエラーは、ノードプロセスが終了していないために発生します。ただし、ポートが他のプロセスによって使用されている場合があるため、そのポートをブロックしている正しいプロセスを理解/特定することが難しい場合があります。以下のWolfReporterは、この問題に対する正しい解決策を持っています!stackoverflow.com/a/22875192/36975
qualbeen

6
私はps aux | grep node、プロセスID(2番目の列)を見つけて、それを強制終了しましたkill <pid>(私はでしたkill 18762)。
nik_m 2018

168

実行:

ps -ax | grep node

次のようなものが得られます:

60778 ??         0:00.62 /usr/local/bin/node abc.js

次に行います:

kill -9 60778

ありがとう!私のマシンで動作します!
olefrank 16

ありがとう。これは私が必要としたものでした。pm2をインストールして、ノードアプリを閉じるときにノードアプリを自動起動しました。ノードを自動起動するには、pm2を無効にする必要がありました。
KlevisGjN 2017

動作します!どうもありがとうございました
Wim den Herder

9
Windowsではそれをどのように行いますか?
ウィリアム

kill -15 60778それが正常に終了するには、プロセスが可能になると(多くの方が良いだろうSIGTERM送る場合は代わりに)SIGKILL
praj

39

Linux(少なくともUbuntu派生物)

killall node

このフォームより簡単です。

ps | grep <something>
kill <somepid>

ポートを保持している孤児がいる場合はどちらも機能しません。代わりに、次のようにします。

netstat -punta | grep <port>

ポートが保持されている場合は、次のように表示されます。

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

今pidによって殺す:

kill -9 <pid>

1
これは完全な回答としてマークする必要があります。私の場合も同様に、それは孤児の子供でした。これは彼らがゾンビプロセスと呼ぶものですか?
Nithish Inpursuit Ofhappiness 2015

1
代わりに、期待の<pid>/<parent>私が取得-
フランシスコ・コラレスモラレス

35

次のコマンドは、実行中のノードプロセスのリストを提供します。

ps | grep node

そのポートを解放するには、以下を使用してプロセスを停止します。

kill <processId>

3
プロセス| grep -v grepを除外するためにを追加することができgrepます。
Garrett Hyde

6
元のポスターが書いたように:「Windows 7で」... ;-)
Golo Roden、

4
より良い代替案はpidof node
イタイグルーデフ

pidof 自作でosxに簡単にインストールされました brew install pidof
electblake 2013

1
さらに多くのノードアプリケーションを実行している場合は、アドレスが他のアプリケーションにバインドされている可能性があります。起動しようとしているポートにバインドされているpidを検索する方がよいのではないでしょうか。つまり、Linuxの場合はnetstat -lnptu | grep port#。ウィンドウと同等のものはわかりません。
クリスト

31

EADDRINUSEアプリケーションが使用するポートが別のプロセスによって占有されているため、エラーが発生しています。このポートを解放するには、占有プロセスを終了する必要があります。

あなたが上にあるので、Windowsの、コマンドプロンプトを使用してプロセスを終了することができます(cmd)。を使用するcmdと、ブロッキングアプリケーションのプロセスID(PID)を検出できます。プロセスを終了/強制終了するには、PIDが必要です。

ここにステップバイステップガイドがあります...

  1. 指定されたポート(この例では、ポートは「3000」)で実行されているすべてのプロセスを検索します。

    netstat -ano | 「:3000」を検索

  2. netstatコマンドは、指定されたポートで実行されているすべてのプロセスを一覧表示します。netstat結果の最後の列にPIDs が表示されます(この例では、PIDは "8308"です)。PID次のコマンドを実行すると、特定の項目の詳細を確認できます。

    tasklist / fi "pid eq 8308"

  3. プロセスを終了したい場合は、次のコマンドを使用して終了できますPID(この例では、PIDは "8308"です)。

    taskkill / pid 8308 / f

スクリーンショット

ここに画像の説明を入力してください


1
しっかりした説明。
ジョーヒーリー

19

エラーエラーが発生した場合:EADDRINUSEをリッスンします。

次のシェルコマンドを実行してみてください。

netstat -a -o | grep 8080
taskkill /F /PID 6204

grepは私のサーバーがポート8080で実行されていることを知っているので、8080 static食べました。港。


1
やっと!プロセスではなくポートで検索する回答。ポートを占有できるのはノードだけではありません!
Michael Scheper

どの実行中のプロセスがポートをロックしているかを検出するためのモジュール、porthogを作成しました。基本的に上記のコードを実行します。
Corey

15

サーバーが実行されていると仮定します port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

その後の使用 kill -9 <pid>

上記の場合 sudo kill -9 11716


12

以下のコマンドを使用して、特定のポートで実行されているプロセスを強制終了します-以下のこの例では3000

kill -9 $(lsof -t -i:3000)

7

私にとって有効な解決策の1つは、対応する「http:// localhost:3000 /」スクリプトを実行しているブラウザでウィンドウを閉じるだけでした。


はい、ブラウザウィンドウが開いたままであることがlocalhostポートとの共通の問題です:-)
Dave Everitt

7

プロセスIDを確認する

sudo lsof -i:8081

特定のプロセスを殺すより

sudo kill -9 2925

ここに画像の説明を入力してください


6

エラーが発生したとき

エラー:EADDRINUSEをリッスンします

コマンドプロンプトを開き、次の指示を入力します。

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

その後、電話ギャップインターフェイスを再起動します。

phonegapが使用しているプロセスIDを知りたい場合は、TASK MANAGERを開いて、列見出しPIDを確認し、PID番号を見つけます。


私はtaskkillを機能させることができなかったので、タスクマネージャーを開いてPIDを追加し、そこで殺しました
Tom Stickel

5

killall -9パトリックによって提案された前述のノードは期待どおりに動作し、問題を解決しますが、理由に関するこの非常に答えの編集部分を読むことをお勧めしますkill -9が最善の方法ではないの。

その上、すべてのアクティブなプロセスを盲目的に強制終了するのではなく、単一のプロセスをターゲットにすることができます。

その場合、まずそのポートで実行されているプロセスのプロセスID(PID)を取得します(たとえば8888)。

lsof -i tcp:8888

これは次のようなものを返します:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(聞いてください)次に、ただ実行します(ps-実際には実行しません。以下をお読みください):

kill -9 57385

4

これはMacで動作します:

ステップ1。

sudo lsof -i tcp:3000 (or whatever port you want to kill)

上記のコマンドは、現在ポートを保持しているプロセスIDを提供します。

ステップ2。

Kill -9 <pid>

3

ポートはapp.jsまたはurプロジェクト構成ファイルで変更できます。

デフォルト( 'ポート'、80)

そして、ポート80がすでに使用されているかどうかを確認するには、次のことができます

netstat -antp | grep 80

netstat -antp | grepノード

ノードプロセスがすでに実行されているかどうかを確認したい場合があります。

ps -ef | grepノード

すでに実行中の場合は、次のコマンドを使用して強制終了できます

killallノード


1

学習しながら2つのサーバーを作成し、同じポート8081でリッスンし、同じコードから実行しました

1番目のサーバーの作成が機能しました2番目のサーバーの作成がEADDRINUSEで失敗しました

node.jsコールバックの遅延が、どちらも機能しないか、2番目のサーバーの作成に例外があり、プログラムが終了したため、1番目のサーバーも閉じている可能性があります

2サーバーの問題のヒント、私は次の理由で取得しました: エラーの修正方法:nodejsの使用中にEADDRINUSEをリッスンしますか?


1

エラー:EADDRINUSEをリッスンしてUbuntuで解決し、ターミナルnetstat -nptl で実行します。kill -9 {process-number}このコマンドの後にノードプロセスを強制終了するため、node server.jsコマンドをもう一度実行してみます。

EADDRINUSE ::: 8080を聞く

netstat -nptl

tcp6 0 0 ::: 9000 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 5800 ::: * LISTEN-
tcp6 0 0 ::: 5900 ::: * LISTEN-
tcp6 0 0 ::: 8080 :: :* LISTEN 10401 /ノード
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: * LISTEN-
tcp6 0 0 ::: 22 ::: * LISTEN-
tcp6 0 0 ::: 10137 ::: * LISTEN 9660 / java

殺す-9 10401


2
ユーザーはそれがWindows上にあると述べました。Windowsではnetstat、さまざまなパラメーターを受け取ります。netstat -a -p tcp -b -vプロセス名を出力します。
arboreal84

0

MacとRaspberry Piにnode redがインストールされています。まったく同じ問題があり、「killall」を実行しても効果がありませんでした。Raspberry Piをシャットダウンしてコンピューターを再起動すると、問題なく動作しました。


0

npm startコマンドを2つの異なるタブで実行しようとした可能性があります。npmstartをすでにいくつかのタブで実行している場合は実行できません。一度確認してください。


詳細を入力してください。
DeshDeep Singh 2015

0

上記のすべてを試したが、それでもルージュプロセスが見つからない場合は、もう一度試してみてください。ただし、コマンドの前に「sudo」を含めてください。


0

UIがもっと好きな場合は、WindowsタスクマネージャーでプロセスNode.jsを見つけて強制終了してください。




0

端末で次のコマンドを使用して、ポートを強制終了する必要があります

$ sudo killall -9 nodejs

0

[解決済み]

手遅れかもしれませんが、それは魅力のように働いています。

pm2インストールする必要があります

npm install -g pm2

現在実行中のサーバー(server.js)を停止するには:

pm2 stop -f server.js

0

WSL2 / Linux / Macで実行中のアクティブなポート-4000(私の場合)を強制終了するためにpackage.jsonに以下を追加することでこの問題を解決しました

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

ソース


-1

ノードサーバーを強制終了するには、まずターミナルで次のコマンドを実行します。

  1. top
  2. 別のウィンドウを開きid、前のウィンドウからサーバーをコピーします。PID number -9 kill これで、ノードサーバーを強制終了して、アプリを実行してみてください。

-1

netstat -ano | grep "portnumber"そのプロセスのポート番号/ PIDをリストするためにコマンドを使用しました。その後、使用できますtaskkill -f //pid 111111プロセスを強制終了するためにます。最後の値は、最初のコマンドで見つけたpidです。

時々遭遇する問題の1つは、プロセスを強制終了した後でもノードが再起動することです。そのため、古き良きタスクマネージャーを使用してノードプロセスを手動で強制終了する必要があります。


-4

ウィンドウで、次のコマンドを実行してください:

taskkill /F /PID 1952

1
1952年は変数です。強制終了するプロセスのIDが異なる場合があります。
Adrianによるデザイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.