Windows環境にnode.jsサーバーを立てたとき、
- 適当なサーバーを動かす
- Ctrl+Cで強制停止させる
- なのにプロセスが動き続ける
- 新規にサーバー起動ができない
こういう困った事態に遭遇しました。
ようやく正しいプロセスの止め方が分かったので、
node.jsサーバーを適切に停止させる方法を紹介
Windows環境ならこの方法を使えば間違いないです。
このページの目次
EADDRINUSE: address already in useというエラー発生
とあるnode.jsライブラリを使ってました。
githubからダウンロードしてビルドして
コマンドラインからサーバーを起動しました。
▼ このような一連のコマンド
1 2 3 4 5 6 7 |
REM サーバーを起動 npm run-script dev REM サーバー実行中... Server launched on port: 4000 REM Ctrl+Cを押して強制終了 |
このようにCtrl+Cでサーバーを終了していました。それで上手くプロセスが終了してくれることが大抵だけど、プロセスだけが残ってしまう場合もあるようです。
例えば一度サーバーを起動させてからCtrl+Cで強制終了、そのあともう一度 npm run-script dev でサーバー起動してみるとこんなエラーが表示されました。
▼ こんなエラーが発生!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Server launched on port: 4000 events.js:292 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE: address already in use 127.0.0.1:4000 at Server.setupListenHandle [as _listen2] (net.js:1318:16) at listenInCluster (net.js:1366:12) at GetAddrInfoReqWrap.doListen [as callback] (net.js:1503:7) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:69:8) Emitted 'error' event on Server instance at: at emitErrorNT (net.js:1345:8) at processTicksAndRejections (internal/process/task_queues.js:80:21) { code: 'EADDRINUSE', errno: -4091, syscall: 'listen', address: '127.0.0.1', port: 4000 } |
「address already in use 127.0.0.1:4000」
つまり4000番ポートを使って127.0.0.1 = localhostからサーバー起動したけど、既に使われてるから起動できないません、というエラーメッセージです。
実はサーバープロセスが生きてたという話
この解決方法は簡単でした。
Windowsでサーバープロセス停止させる正しい手順
その手順はざっと説明すると次の通り
1.特定のポート番号を使用しているPIDを調べる
このケースでは4000のポート番号です。
そのポート番号を持つPIDを調べます。
▼ netstatコマンドで一覧表示
1 |
netstat -nao |
▼ 一覧から4000番ポートを探す
1 2 3 4 5 6 7 8 |
ローカル アドレス 状態 PID 0.0.0.0:135 LISTENING 1216 0.0.0.0:445 LISTENING 4 0.0.0.0:902 LISTENING 4920 127.0.0.1:4000 LISTENING 5008 >127.0.0.1:4000 ESTABLISHED 5008 127.0.0.1:50804 LISTENING 14060 127.0.0.1:53408 ESTABLISHED 14260 |
ローカルアドレスが 127.0.0.1 であり、なおかつ状態が ESTABLISHED になっているのが起動中サーバーのプロセスです。そのPIDをメモしておいてください。
※ この場合のPIDは 5008 だった
2.taskkillコマンドでPIDをキルする
あとはサーバーのPIDをキルするだけです。
▼ taskkillコマンドを実行
1 |
taskkill /pid 5008 /F |
この例では 5008 となっていますが、そこは各自で調べたPIDに置き換えてください。これでnode.jsで立てたサーバーをプロセスごと終了できます。
あるいはタスクマネージャーから【詳細】を開き、目的のPIDを探し出して【右クリック】=>【タスクの終了】でキルしても同じことができます。
どちらを使ってもOKです。
node.jsサーバーが再起動できない対処法まとめ
簡単に箇条書きでまとめます。
- node.jsサーバーをCtrl+Cなどで強制終了
- なぜかプロセスが生きていて再起動できない
- その場合はプロセスのPIDを調べる
- 対象のPIDをkilltaskなどで終了すればOK
node.jsサーバーが再起動できない時は役立つ方法かも
以上、node.jsサーバーが再起動できない対処法でした。
何かあればコメント欄から。ではまた(@^^)/~~~