No Windows, o que pode procurar pela porta 8080 e tentar eliminar o processo usado por meio de um arquivo .BAT?
No Windows, o que pode procurar pela porta 8080 e tentar eliminar o processo usado por meio de um arquivo .BAT?
Respostas:
Aqui está um comando para você começar:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Quando estiver confiante no seu arquivo em lotes, remova @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Observe que você pode precisar alterar isso um pouco para diferentes sistemas operacionais. Por exemplo, no Windows 7, você pode precisar em tokens=5
vez de tokens=4
.
Como isso funciona
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Isso permite que você execute command
e faça um loop sobre sua saída. Cada linha será inserida %variable
e poderá ser expandida otherCommand
quantas vezes você quiser, onde quiser. %variable
no uso real, só pode ter um nome de uma letra, por exemplo %V
.
"tokens=4 delims= "
Isso permite que você divida cada linha por espaço em branco, pegue o quarto pedaço dessa linha e coloque-o %variable
(no nosso caso %%P
). delims
parece vazio, mas esse espaço extra é realmente significativo.
netstat -a -n -o
Basta executá-lo e descobrir. De acordo com a ajuda da linha de comando, ele "Exibe todas as conexões e portas de atendimento". "," Exibe endereços e números de portas em formato numérico. "E" Exibe o ID do processo proprietário associado a cada conexão. ". Eu apenas usei essas opções, já que alguém o sugeriu e funcionou :)
^|
Isso pega a saída do primeiro comando ou programa ( netstat
) e a passa para um segundo programa de comando ( findstr
). Se você estivesse usando isso diretamente na linha de comando, em vez de dentro de uma cadeia de comando, você usaria em |
vez de ^|
.
findstr :8080
Isso filtra qualquer saída que é passada para ele, retornando apenas as linhas que contêm :8080
.
TaskKill.exe /PID <value>
Isso mata uma tarefa em execução, usando o ID do processo.
%%P instead of %P
Isso é necessário em arquivos em lote. Se você fez isso no prompt de comando, usaria %P
.
HELP FOR
na linha de comando para ver um monte de outras opções que FOR
lhe dão, e verificar netstat -?
, findstr /?
e TaskKill /?
para ainda mais ajuda.
tokens=4
é o Windows XP, eu acho, e o tokens=5
Windows 7. Também é uma boa ideia /F
forçar a matança.
Abra o prompt de comando e execute os seguintes comandos
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
, aqui 3116 é o ID do processo
Para encontrar um processo específico na linha de comando, use o comando abaixo aqui 8080 é a porta usada pelo processo
netstat -ano | findstr 8080
matar processo use o comando abaixo aqui 21424 é o ID do processo
taskkill /pid 21424 /F
O uso da solução de Merlyn causou a morte de outros aplicativos, como o Firefox. Esses processos estavam usando a mesma porta, mas não como ouvinte:
por exemplo:
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
Portanto, é possível excluí-los adicionando "LISTENING" ao findstr da seguinte maneira:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Para listar todo o processo em execução na porta 8080, faça o seguinte.
netstat -ano | encontre "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
Em seguida, para matar o processo, execute o seguinte comando
skillkill / F / PID 10612
Obrigado a todos, apenas para adicionar que algum processo não será fechado, a menos que a opção / F force também seja enviada com o TaskKill. Também com a opção / T, todos os threads secundários do processo serão fechados.
C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
Para serviços, será necessário obter o nome do serviço e executar:
sc stop ServiceName
Apenas para conclusão:
Eu queria matar todos os processos conectados a uma porta específica, mas não o processo de escuta
o comando (no shell do cmd) para a porta 9001 é:
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
Funciona porque o netstat imprime a porta de origem, a porta de destino e, em seguida, ESTABELECIDO
Criado um arquivo bat com o conteúdo abaixo, ele aceita a entrada para o número da porta
@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
Por fim, clique em "Enter" para sair.
Se você deseja interromper o processo que está escutando na porta 8080, você pode usar o PowerShell. Basta combinar o Get-NetTCPConnection
cmdlet com Stop-Process
.
Testado e deve funcionar com o PowerShell 5 no Windows 10 ou Windows Server 2016. No entanto, acho que também deve funcionar em versões mais antigas do Windows com o PowerShell 5 instalado.
Aqui está um exemplo:
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"):
Semelhante à resposta de Merlyn, mas esta também lida com esses casos:
Aqui está:
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.
)
Passos:
Vá para a conf
pasta do seu servidor apache tomcat . No meu caso, é apache-tomcat-7.0.61\conf
como eu estou usando apache-tomcat-7.0.61
Abra server.xml
e altere o número da porta de 8080 para qualquer outra porta como desejar. Por exemplo: 8081,8082,8087 etc
Agora vá para a bin
pasta e executeshutdown.bat
Agora reinicie o servidor através do eclipse.
Agora seu projeto funcionará sem interrupção.
Se alguém estiver procurando por um Script do 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)
}
}
Essa função basicamente faz o que as funções acima fazem, mas está no formato de script do Powershell, para que você possa adicioná-lo ao seu perfil do Powershell. Para encontrar a localização do seu perfil, vá para o PowerShell e digiteecho $profile
netstat
ferramenta.
Cole isso na linha de comando
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
Se você quiser usá-lo em um lote pu em %%P
vez de%P
netstat
ferramenta foi traduzida para outros idiomas
se você pelo sistema, você não pode terminar a tarefa. tente este comando
x:> parada de rede http / y