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
を使用します。
コマンドを開くプロンプトを表示して、以下のコマンドを実行します。
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
ポート8080で実行されているすべてのプロセスをリストするには、次のようにします。
ネットスタット"8080"を見つける
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
それからプロセスを殺すために次のコマンドを実行します
taskkill/F/PID 10612
/ F強制スイッチもTaskKillと一緒に送信されない限り、一部のプロセスが終了しないことを追加するためだけにありがとうございます。また/ Tスイッチを使用すると、プロセスのすべてのセカンダリスレッドが閉じられます。
C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
サービスの場合は、サービスの名前を取得して実行する必要があります。
sc停止ServiceName
どのプロセスがポートをリッスンしているか調べます。 どのプロセスが、どのプロセスがWindows上のポートをリッスンしているかを知ることができますか?
それを殺しなさい: プロセスを殺すためにWindowsの.batファイルを書く方法は?
完成のためだけに:
特定のポートに接続されているすべてのプロセスを強制終了したいが、待機しているプロセスは強制終了したくない
ポート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"):
誰かがPowershell Scriptを探しているなら:
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
と入力します。
これをコマンドラインに貼り付けます
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
%%P
の代わりにバッチpu %P
でそれを使いたい場合
ステップ:
Apache Tomcatサーバーのconf
フォルダーに移動します。私の場合は、Apache-Tomcat-7.0.61を使用しているので、そのApache-Tomcat-7.0.61\conf
server.xml
を開き、ポート番号を8080から他のポートに変更します。例えば、8081、8082、8087などです。
今bin
フォルダーに行き、shutdown.bat
を実行してください。
Eclipseを介してサーバーを再起動します。
これでプロジェクトは中断することなく機能します。
Merlynの応答に似ていますが、これはこれらのケースも処理します。
ここにあります:
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.
)
あなたがシステムによってあなたがそれをタスクを終了することはできません。このコマンドを試してください
x:>ネットストップhttp/y