私は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)
再起動せずに修正するにはどうすればよいですか?
サーバーをバインドしようとしているアドレスが使用中であることを意味します。別のポートを試すか、そのポートを使用してプログラムを閉じます。
実行:
ps -ax | grep node
次のようなものが得られます:
60778 ?? 0:00.62 /usr/local/bin/node abc.js
それから:
kill -9 60778
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>
次のコマンドは、実行中のノードプロセスのリストを表示します。
ps | grep node
そのポートを解放するには、次を使用してプロセスを停止します。
kill <processId>
アプリケーションが使用するポートが別のプロセスによって占有されているため、エラーEADDRINUSE
が発生しています。このポートを解放するには、占有プロセスを終了する必要があります。
Windowsにいるため、コマンドプロンプト(cmd
)を使用してプロセスを終了できます。 cmd
を使用すると、ブロッキングアプリケーションのプロセスID(PID)を検出できます。プロセスを終了/強制終了するには、PIDが必要です。
ここにステップバイステップガイドがあります...
指定されたポート(この例では、ポートは「3000」)で実行されているすべてのプロセスを検索します。
netstat -ano | 「:3000」を検索
netstat
コマンドは、指定されたポートで実行されているすべてのプロセスをリストします。 netstat
の結果の最後の列には、PID
sが表示されます(この例では、PIDは「8308」です)。次のコマンドを実行すると、特定のPID
の詳細を確認できます。
タスクリスト/ fi "pid eq 8308"
プロセスを終了する場合は、PID
を使用して次のコマンドを使用します(この例では、PIDは「8308」です)。
taskkill/pid 8308/f
スクリーンショット
サーバーが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
以下のコマンドを使用して、特定のポートで実行されているプロセスを強制終了します-この例では3000
kill -9 $(lsof -t -i:3000)
私のために働いた1つの可能な解決策は、ブラウザのウィンドウを閉じるだけで、対応する「 http:// localhost:3000 / 」スクリプトが実行されていました。
エラーが発生したとき
エラー:EADDRINUSEをリッスンします
コマンドプロンプトを開き、次の指示を入力します。
netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>
その後、電話ギャップインターフェイスを再起動します。
Phonegapが使用しているプロセスIDを知りたい場合は、TASK MANAGERを開き、列見出しPIDを見て、PID番号を見つけます。
Patrickによって提案された前述の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
app.jsまたはurプロジェクト構成ファイルでポートを変更できます。
デフォルト(「ポート」、80)
ポート80がすでに使用されているかどうかを確認するには、次のようにします。
netstat -antp | grep 8
netstat -antp | grep node
ノードプロセスが既に実行されているかどうかを確認できます。
ps -ef | grep node
既に実行されていることがわかった場合は、次を使用して強制終了できます。
killallノード
これはMacで動作します:
ステップ1。
Sudo lsof -i tcp:3000 (or whatever port you want to kill)
上記のコマンドは、現在ポートを保持しているプロセスIDを提供します。
ステップ2。
Kill -9 <pid>
学習しながら、同じポート8081でリッスンし、同じコードから実行する2つのサーバーを作成しました
最初のサーバー作成シャッドが機能しました
node.jsのコールバック遅延は、どちらも機能しない、または2番目のサーバー作成に例外があり、プログラムが終了した理由の可能性があります。そのため、1番目のサーバーも閉じられます。
2サーバーの問題のヒント、私は以下から得ました: エラーの修正方法:nodejsの使用中にEADDRINUSEをリッスンしますか?
エラー:EADDRINUSEをリッスンして、ターミナルnetstat -nptl
で実行するUbuntuで解決します。このkill -9 {process-number}
の後、このコマンドはノードプロセスを強制終了し、node server.jsコマンドを再度実行できます。
Ex
eADDRINUSEを聞く::: 8080
netstat -nptl
tcp6 0 0 ::: 9000 ::: * LISTEN 9660/Java
tcp6 0 0 ::: 5800 ::: *聞く-
tcp6 0 0 ::: 5900 ::: *聞く-
tcp6 0 0 ::: 8080 ::: * LISTEN 10401/node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660/Java
tcp6 0 0 ::: 80 ::: * LISTEN-
tcp6 0 0 ::: 22 ::: *聞く-
tcp6 0 0 ::: 10137 ::: * LISTEN 9660/Java
キル-9 10401
ubuntuのターミナルでpkill -9ノードとしてノードを強制終了し、ノードを起動します
そのプロセスのポート番号/ PIDをリストするために、コマンドnetstat -ano | grep "portnumber"
を使用しました。次に、taskkill -f //pid 111111
を使用してプロセスを強制終了できます。最後の値は、最初のコマンドで見つかったpidです。
私が時々遭遇する問題の1つは、プロセスを強制終了した後でもノードが再スポーンすることです。そのため、ノードプロセスを手動で強制終了するには、古き良きタスクマネージャを使用する必要があります。
ps -ef | grep node app.jsを検索し、app.jsのPIDを強制終了します
ノードサーバーを強制終了するには、まずターミナルで次のコマンドを実行します。
top
id
をコピーします:PID number -9 kill
これで、ノードサーバーを強制終了して、アプリの実行を再試行します。私の場合、マシンを再起動すると問題は解決しました。
上記のすべてを試してみたが、それでもルージュプロセスが見つからない場合は、もう一度試してください。ただし、コマンドの前に「Sudo」を含めてください。
MacとRaspberry Piにノードレッドがインストールされています。まったく同じ問題があり、「killall」を実行しても解決しませんでした。 Raspberry Piをシャットダウンしてコンピューターを再起動すると、正常に機能しました。
Npm startコマンドを2つの異なるタブで実行しようとした可能性があります。npmstartが既にtab.check itで実行されている場合は実行できません。
端末で次のコマンドを使用して、ポートを強制終了する必要があります。
$ Sudo killall -9 nodejs
UIがもっと好きなら、WindowsタスクマネージャーでNode.jsプロセスを見つけて、それを強制終了してください。