そのポート掴んでんの誰じゃい
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