Windowsで何がポート8080を探し、それが.BATファイルを介して使用しているプロセスを殺そうとすることができますか?
Windowsで何がポート8080を探し、それが.BATファイルを介して使用しているプロセスを殺そうとすることができますか?
回答:
ここにあなたを始めるためのコマンドがあります:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
バッチファイルに自信がある場合は、を削除し@ECHO
ます。
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
OSによっては、これを少し変更する必要がある場合があります。たとえば、Windows 7 tokens=5
ではの代わりに必要になる場合がありますtokens=4
。
この仕組み
FOR /F ... %variable IN ('command') DO otherCommand %variable...
これにより、を実行しcommand
、その出力をループできます。各行はに詰め込まれ%variable
、otherCommand
好きな場所で好きなだけ何度でも拡張できます。 %variable
実際の使用では、1文字の名前のみを使用でき%V
ます。
"tokens=4 delims= "
これにより、各行を空白で分割し、その行の4番目のチャンクを取り出して%variable
(この場合は%%P
)詰め込みます。 delims
空に見えますが、その余分なスペースは実際には重要です。
netstat -a -n -o
実行して見つけてください。コマンドラインヘルプによると、「すべての接続とリスニングポートを表示します」、「アドレスとポート番号を数値形式で表示します」、「各接続に関連付けられている所有プロセスIDを表示します」。他の誰かがそれを提案したので私はこれらのオプションを使用しました、そしてそれはたまたまうまくいきました:)
^|
これにより、最初のコマンドまたはプログラム(netstat
)の出力が取得され、2番目のコマンドプログラム(findstr
)に渡されます。あなたが代わりにコマンド文字列内で、コマンドラインで直接これを使用していた場合は、使用する|
代わりに^|
。
findstr :8080
これは、渡されたすべての出力をフィルタリングし、を含む行のみを返します:8080
。
TaskKill.exe /PID <value>
これにより、プロセスIDを使用して実行中のタスクが強制終了されます。
%%P instead of %P
これはバッチファイルで必要です。コマンドプロンプトでこれを行った場合は、%P
代わりに使用します。
HELP FOR
他の多くのオプションを参照するには、コマンドラインでFOR
あなたを与えるだろうし、チェックnetstat -?
、findstr /?
とTaskKill /?
さえより多くの助けのために。
tokens=4
私が考えるWindows XPとtokens=5
Windows 7 /F
です。強制終了することもお勧めします。
コマンドプロンプトを開き、次のコマンドを実行します
C:\Users\username>netstat -o -n -a | findstr 0.0:3000
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
C:\Users\username>taskkill /F /PID 3116
、ここで3116はプロセスIDです
コマンドラインで特定のプロセスを見つけるには、以下のコマンドを使用します。8080はプロセスが使用するポートです
netstat -ano | findstr 8080
ここでコマンドを使用してプロセスを強制終了するには21424がプロセスIDです
taskkill /pid 21424 /F
Merlynのソリューションを使用すると、Firefoxなどの他のアプリケーションが強制終了されました。これらのプロセスは同じポートを使用していましたが、リスナーとしては使用していませんでした:
例えば:
netstat -a -n -o | findstr :8085
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 6568
TCP 127.0.0.1:49616 127.0.0.1:8085 TIME_WAIT 0
TCP 127.0.0.1:49618 127.0.0.1:8085 TIME_WAIT 0
したがって、次のようにfindstrに「LISTENING」を追加することで、これらを除外できます。
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
完了のために:
特定のポートに接続されているすべてのプロセスを強制終了したいが、リッスンしているプロセスは強制終了しなかった
ポート9001の(cmdシェルの)コマンドは次のとおりです。
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr:
netstat:
netstatが送信元ポート、宛先ポート、ESTABLISHEDの順に出力するため、これが機能します。
以下の内容のbatファイルを作成し、ポート番号の入力を受け入れます
@ECHO ON
set /p portid=Enter the Port to be killed:
echo %portid%
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
最後に「Enter」をクリックして終了します。
ポート8080でリッスンしているプロセスを強制終了する場合は、PowerShellを使用できます。Get-NetTCPConnection
コマンドレットとを組み合わせるだけStop-Process
です。
テスト済みで、Windows 10またはWindows Server 2016上のPowerShell 5で動作するはずです。ただし、PowerShell 5がインストールされている古いWindowsバージョンでも動作するはずです。
次に例を示します。
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
マーリンの応答に似ていますが、これはこれらのケースも処理します:
ここにあります:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
手順:
Apache Tomcatサーバーのconf
フォルダーに移動します。私の場合、apache-tomcat-7.0.61を使用しているため、apache-tomcat-7.0.61\conf
server.xml
ポート番号を開いて、8080から他のポートに変更します。例:8081,8082,8087など
次にbin
フォルダに移動して実行しますshutdown.bat
次に、Eclipseを使用してサーバーを再起動します。
これでプロジェクトは中断することなく機能します。
誰かがPowershellスクリプトを探しているなら:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
この関数は基本的に上記の関数の機能を実行しますが、Powershellスクリプト形式であるため、Powershellプロファイルに追加できます。プロファイルの場所を見つけるには、powershellに移動して次のように入力しますecho $profile
netstat
ツールです。
これをコマンドラインに貼り付けます
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
%%P
代わりにバッチpuで使用する場合%P
netstat
ツールが他の言語に翻訳されていることを知りません
システムによっては、タスクを終了できません。このコマンドを試してください
x:> net stop http / y