Windowsでlocalhostのポートを現在使用しているプロセスを終了するにはどうすればよいですか?


回答:


1057

ステップ1:

cmd.exeを開き(注:管理者として実行する必要ある場合あります、これは必ずしも必要ではありません)、次のコマンドを実行します。

netstat -ano | findstr :PORT_NUMBER

(PORT_NUMBERを必要なポート番号に置き換えますが、コロンはそのままにします)

赤い丸で囲まれた領域は、PID(プロセス識別子)を示します。必要なポートを使用しているプロセスのPIDを見つけます。

ステップ2:

次に、次のコマンドを実行します。

taskkill /PID PID /F

(今回はコロンなし)

最後に、「ステップ1」のコマンドを再実行して、操作が成功したかどうかを確認できます。成功した場合、そのポート番号の検索結果は表示されません。


機能していません。まだプロセスが表示されます
Hardik Mandankaa 2017

16
完璧に働いています。私の場合、Tomcatはポート8080で実行されていたため、Springアプリをもう一度起動する必要がありました。 i.imgur.com/aVwSYvR.png どうもありがとうございました。
Hugo LM

16
taskkill実行しているとき、私はエスケープ文字を入力する必要がありました:taskkill //PID 12552 //F
ロバート・

1
承認された回答は、失敗時に再起動するように設定されているサービスでは動作しません(これはLinuxではありません)
nurettin

1
あなたはPORT_NUMBERではなくPID_NUMBERを意味していたと思いますtaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

ステップ1(同じことがKavinduWijeによって書かれた承認された回答にあります):

netstat -ano | findstr :yourPortNumber

ステップ2の変更:

tskill typeyourPIDhere 

taskkill一部のgit bashターミナルでは機能しません


1
私にはそれが見つかりませんでした
Tzvi Gregory Kaidanov 2017年

1
@TzviGregoryKaidanovあなたが直面している問題は何ですか?
afsarkhan10182

1
おかげで、それはtaskkillをtskillに変更することで機能しました
Md Shoaib Alam

1
これは私のために働いたソリューションです。GIT Bashを使用しています。
dxhans5

1
これは、最初のコマンドの出力をseondに渡すことで実行できますか?
James

115

Windows 10のデフォルトツール:

  • 第一歩:

管理者としてWindows PowerShellを開きます

  • ステップ2:

ポート8080のPID(ProcessID)を見つけます。

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0リッスン77777

  • ステップ3:

ゾンビプロセスを終了します。

taskkill /f /pid 77777

ここで、「77777」はあなたのPIDです


1
プロセスを自動化し、cmd出力を表示して新しいコマンドを手動で書き込むことができない場合に、これら2つのコマンドを1つのbatファイルにまとめる方法
Serob_b

3
@Serob_b- set /p port="Enter port: ">入力ポート FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> PIDを変数に抽出しますtaskkill /f /pid %ProcessId%->タスクを強制終了 します -> cmd /k ウィンドウを開いたままにします
Vikrant

94

GitBashを使用している場合

第一歩:

netstat -ano | findstr :8080

ステップ2:

taskkill /PID typeyourPIDhere /F 

/Fプロセスを強制終了します)


ダブルスラッシュは機能しませんでした
kylexy1357

2
@ kylexy1357単一のスラッシュで試してください。「ダブルスラッシュ」は/の前にあるエスケープ文字で、一部のシェルでは必要ありません
Robert

27

Windows PowerShellのバージョン1以降のポート3000種類のプロセスを停止するには:

Stop-Process(、(netstat -ano | findstr:3000).split()| foreach {$ [$ .length-1]})-Force


@morganpdxで提案されているように、PowerShell風の、より良いバージョンです:

Stop-Process -Id(Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,

3
私はこれがうまくいくことを見つけます:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx 2018年

1
@Green Windows PowerShellでコマンドを実行する必要があります
todorm

1
最初の1つのエラーが発生し、seconfがうまくいった
Tom

24

コマンドラインで使用する場合:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

batファイルで使用する場合:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a

1
.batで実行する場合は、%aを%% aに置き換えます
Mahesh Narwade

23

すでにポート番号がわかっている場合は、ソフトウェア終了シグナルをプロセス(SIGTERM)に送信するだけで十分でしょう。

kill $(lsof -t -i :PORT_NUMBER)

ポートがIPv4を使用していることがわかっている場合は、lsof -nt -i4TCP:9001同様に実行できます。
Josh Habdas


10

私はWindowsでzookeeperを実行していて、zookeeper-stop.shを使用して2181ポートで実行しているZooKeeperを停止できなかったため、この2つのスラッシュ「//」メソッドをtaskkillに試しました。動いた

     1. netstat -ano | findstr :2181
       TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       8876
       TCP    [::]:2181              [::]:0                 LISTENING       8876

     2.taskkill //PID 8876 //F
       SUCCESS: The process with PID 8876 has been terminated.

6

Windowsターミナルを使用している場合、強制終了プロセスは少し面倒ではありません。kill PID新しいWindowsターミナルが特定のbashコマンドをサポートしているので、私はWindowsターミナルを使用していて、ポートのプロセスを強制終了するのにうまくいきます。例えば:kill 13300

したがって、プロセス全体は次のようになります。

  • Windowsターミナルを開く
  • 次のコマンドを入力して、プロセスを強制終了しようとしているポートで実行中のプロセスを表示します。 netstat -ano | findstr :PORT
  • プロセスを強制終了するには、次のように入力します。 kill PID

例えば:

PS C:\Users\username> netstat -ano | findstr :4445
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7368
  TCP    [::]:4445              [::]:0                 LISTENING       7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>

最初のコマンドを入力して、それが空を返したポート上のプロセスを一覧表示したときに表示されます。つまり、現在すべてのプロセスが強制終了されています。


私はそれをテストしたのでこれが機能することを知っています、私はそれに関するドキュメントを見つけようとしています、何かありますか?
DanStarns

@DanStarns、これまでこれだけ見つけた!docs.microsoft.com/en-us/windows/terminal
lazycipher

あなたの時間をありがとう、それは私が探しているページではありません、などのターミナルで提供されるすべての機能を備えたページkillです。見つけたらここに投稿します。
DanStarns

1
今のところ、これについてはあまりわかりません。何か見つけたら投稿してください。
lazycipher

4

あなたはbatファイルを実行することによって行うことができます:

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

4

Pythonを使用して実行する場合:特定のポート(たとえば8080)でリッスンしているプロセスをPythonで強制終了することはできますか?

Smunkからの答えはうまくいきます。ここで彼のコードを繰り返します。

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
            continue

これは、Google Cloudの特定のポート番号を使用するソケットでも機能しました。おかげで
ピーシー

0

GitBashを使用した1行のソリューション:

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

8080をサーバーがリッスンしているポートに置き換えます。

頻繁に使用する必要がある場合は~/.bashrc、関数に追加してみてください。

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

そして単に実行する

killport 8080

-1

以下のコマンドを使用してIISを再起動するだけでこれを回避できます。

IISRESET
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.