そのポート掴んでんの誰じゃい
Eclipseからサーバ立ち上げてデバッグしようとしたら、ポートが使用中で起動できない状態に。
誰?誰が掴んでんの??そんなん立ち上げた記憶ないんだけど?
そんなときのための備忘録です。
※殺すときに管理者権限を要求されたら
「管理者として実行」でコマンドプロンプトを起動しておくのがオススメ。
PID特定するだけで殺さないとかなら(多分)権限は不要なので、そのまま起動で。
ポート番号からPIDを特定する
netstatで一覧取得してfindでポート番号指定して絞り込み。
>netstat -ano | find ":9080"
TCP 127.0.0.1:9080 0.0.0.0:0 LISTENING 10428
PIDから逆引きしてサービスを確認
まあPIDわかったらGUIのタスクマネージャから確認してもいいんだけど。
java.exeなんて場合によってはいろんなところに置いてあるわけで、タスクマネージャから「ファイルの場所を開く」でパス見て確認したりもします。
>tasklist /fi "PID eq 10428"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
java.exe 10428 Console 1 1,073,312 K
オプション「/svc」で各プロセスに紐づいている「サービス」の名前が表示されます。
>tasklist /svc /fi "PID eq 10428"
イメージ名 PID サービス
========================= ======== ============================================
java.exe 10428 N/A
オプション「/v」だと詳細に見れるけど、状況によっては取得に時間がかかる場合も。
「セッション名」「セッション#」「メモリ使用量」「状態」「ユーザー名」「CPU時間」「ウィンドウタイトル」が確認できます。
PIDを指定して該当プロセスをkill
これもPIDわかったらGUIから殺せることもあるよね。管理者権限要求されるとかはあるけど。
>taskkill /F /PID 10428
成功: PID 10428 のプロセスは強制終了されました。
おまけ
taskkillコマンドの各種オプションとか。
| パラメーター | 説明 |
|---|---|
| /s <コンピュータ> | 名前またはリモートのIPを指定(\は使用しない)する。省略した場合はローカル。 |
| /u <ドメイン>\\<ユーザ名> |
ユーザまたはドメイン¥ユーザとして、指定ユーザの権限で実行する。省略した場合は実行ユーザ。 |
| /p <パスワード> |
/u パラメータで指定したユーザアカウントのパスワードを指定する。省略した場合はパスワードなし扱い、指定したがパラメータなしだとプロンプトで入力。 |
| /fi <フィルター> | 対象または除外するプロセスの種類を指定する。フィルタはワイルドカード(\*)や複数(の場合はAND条件で絞り込み)指定が可能。詳細は公式ドキュメントを参照。 |
| /pid | 終了するプロセスのPIDを指定する。 |
| /im <イメージ名> | 終了するプロセスのイメージ名を指定する。通常は拡張子を含むファイル名(hoge.exe)となる。ワイルドカード(\*)を使用する場合は、/fiが必須(/fiなしはエラー)。複数指定した場合はOR条件で絞り込み。 |
| /t | 親プロセスを指定する。指定した親プロセスのすべての子プロセスも一括終了させられる。子プロセスに対しての絞り込みは不可。 |
| /f | 強制終了するプロセスを指定する。リモートプロセスの場合、省略してもすべて強制終了となる。 |
最初からイメージ名がわかっている場合は、PIDなくても殺せるね!
Microsoftの公式ドキュメントはこちら→ taskkill | Microsoft Docs