134

Windows では、ポート 8080 を探して、.BAT ファイルを介して使用中のプロセスを強制終了しようとするものは何ですか?

4

13 に答える 13

150

開始するためのコマンドは次のとおりです。

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 7tokens=5では、tokens=4.

これがどのように機能するか

FOR /F ... %variable IN ('command') DO otherCommand %variable...

これにより、 を実行commandし、その出力をループできます。各行は に詰め込まれ、好きな場所で何度でも %variable展開できます。実際の使用では、たとえば.otherCommand%variable%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代わりに使用します。

于 2011-06-01T16:13:30.967 に答える
22

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
于 2013-12-17T15:09:42.293 に答える
15

/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 stop サービス名

于 2012-11-19T11:38:22.850 に答える
6

以下の内容の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」をクリックして終了します。

于 2019-04-01T20:07:53.190 に答える
2

完成のために:

特定のポートに接続されているすべてのプロセスを強制終了したかったのですが、リッスンしているプロセスは強制終了しませんでした

ポート 9001 のコマンド (cmd シェル) は次のとおりです。

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P

検索文字列:

  • r は式用で、c は一致する正確なチェーン用です。
  • [ ]* は一致するスペース用です

netstat :

  • a -> すべて
  • n -> 解決しない (高速)
  • o -> ピッド

netstat は送信元ポート、宛先ポート、ESTABLISHED の順に出力するため、機能します。

于 2014-07-01T08:42:35.650 に答える
1

ポート 8080 でリッスンしているプロセスを強制終了する場合は、PowerShell を使用できます。コマンドレットGet-NetTCPConnectionStop-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"):
于 2016-11-02T19:32:28.187 に答える
0

手順:

  1. Apache Tomcatサーバーconfのフォルダーに移動します。私の場合、apache-tomcat-7.0.61 を使用しています。apache-tomcat-7.0.61\conf

  2. 開いserver.xmlて、ポート番号を 8080 から必要に応じて他のポートに変更します。例: 8081,8082,8087 など

  3. binフォルダに移動して実行しますshutdown.bat

  4. ここで、Eclipse を使用してサーバーを再起動します。

これで、プロジェクトは中断することなく機能します。

于 2015-07-12T14:04:42.520 に答える
0

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.
)
于 2012-11-13T21:21:57.777 に答える