Como Encerrar um Processo do Windows em um Sistema Remoto

Talvez você esteja trabalhando tranquilamente em um servidor remoto do Windows e, de repente, encontre um processo que está consumindo valiosos ciclos da CPU. O que você faz? Mate-o!

Neste tutorial, você aprenderá como encerrar um processo do Windows usando utilitários nativos, utilitários de terceiros e o PowerShell. Primeiro, você aprenderá como examinar os processos em execução no Windows e, em seguida, como encerrar os processos em execução.

Pré-requisitos

Se você quiser acompanhar as etapas deste tutorial, certifique-se de ter o seguinte:

  • A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
  • A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
  • A Sysinternals Suite da Microsoft.
  • O Windows PowerShell 5 ou superior. Este tutorial usa o PowerShell v7.1.3

Consultando um Processo Remoto do Windows com o Tasklist

Desde o Windows XP, existe uma ferramenta útil chamada tasklist. O Tasklist é uma ferramenta prática que consulta os processos em computadores remotos. Antes de encerrar um processo, você primeiro precisa descobri-los!

Abra uma sessão do PowerShell ou prompt de comando em sua área de trabalho e digite o seguinte comando para exibir todos os processos em execução em seu computador remoto.

O comando abaixo consulta um computador remoto (/S) autenticando a conexão com o nome de usuário do administrador (/U) e a senha (/P).

tasklist /S WIN-BANGJIEFNOC.local.net /U administrator /P password

Você notará abaixo que o nome da Sessão não aparece. Como você está executando o tasklist em um computador remoto, o tasklist não fornece o Nome da Sessão.

list of processes on a remote server

Talvez você prefira listar apenas um processo. Sem problemas. Para fazer isso, especifique o parâmetro /FI. O parâmetro /FI aceita uma consulta que é passada para o tasklist para filtrar processos específicos.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
The output of tasklist showing a specific process

Consultando Processos Remotos do Windows com PSList

Outra ferramenta para visualizar processos em execução é o PSList, e esta utilidade faz parte do Conjunto de Ferramentas Sysinternals. Este conjunto de ferramentas existe há muitos anos e foi criado por Mark Russinovich, CTO da Azure!

Vamos começar a ver como você pode visualizar processos em execução em um computador remoto.

1. Abra uma sessão do PowerShell ou prompt de comando em seu desktop e altere o diretório para onde você extraiu o Conjunto de Ferramentas Sysinternals.

2. Em sua sessão do PowerShell, execute o seguinte comando para exibir os processos em execução no computador remoto e o uso de CPU associado em tempo real.

O comando abaixo executa pslist para consultar todos os processos remotos do Windows no computador WIN-BANGJIEFNOC autenticando o nome de usuário Administrator (-u) e senha (-p).

O comando usa o interruptor -s para transformar pslist em modo “gerenciador de tarefas”, que atualiza repetidamente a lista.

Se for a primeira vez que você usa uma ferramenta do Sysinternals, um banner pode aparecer pedindo para você aceitar o EULA; clique em OK.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -s

Agora você vê a seguinte saída da execução desse comando; para este artigo, você está preocupado com 3 desses valores. Como mostrado abaixo.

  • Nome: O nome do processo.
  • Pid: Identificador de Processo, um valor crítico usado neste tutorial, o número de PID pode ser usado para encerrar um processo remoto. É o id numérico atribuído a um processo.
  • CPU: Isso mostra em tempo quase real a utilização de sua CPU disponível.

Os outros valores são relacionados à memória e estão além do escopo deste artigo.

Output in real-time of pslist

3. Como a etapa dois usou o interruptor -s, pressione Ctrl-C para sair do pslist e voltar ao console.

Reduza a lista de processos retornados usando o interruptor -e seguido pelo nome do processo, por exemplo, -e Winlogon.

Matar Processos Por Nome de Processo com PSKill

Agora que você sabe como encontrar processos remotos, vamos agora mergulhar em como matá-los. Para começar, vamos cobrir a utilidade pskill . Primeiro, aprenda como matar processos por nome de processo.

1. Certifique-se de ter um processo que você possa matar em seu servidor remoto. Este tutorial usará o processo do bloco de notas.

2. Abra uma sessão do PowerShell ou prompt de comando em sua área de trabalho local e altere o diretório para onde você extraiu a Suite Sysinternal e execute o seguinte comando. Você pode ver que a sintaxe para pskill é semelhante à do pslist.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p 'password' -e notepad.exe
Output of pskill

3. Agora, execute pslist, como explicado na seção anterior, para confirmar que o processo foi realmente interrompido.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -e notepad.exe
Output of pslist

Matar Processos Por ID de Processo com PSKill

Matar o processo pelo nome pode ser suficiente para suas necessidades se apenas uma única instância desse processo estiver em execução ou se você quiser matar todos os processos com esse nome. E se você quiser matar uma instância específica de um processo em execução? Os seguintes passos demonstrarão isso.

1. Em seu servidor remoto, abra o Bloco de Notas duas vezes; você irá matar um desses processos nesta demonstração; é claro que você pode substituir outros processos.

2. Execute o seguinte comando, observando um dos Pid‘s conforme mostrado abaixo; você precisará disso para o próximo passo.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p password -e notepad
Using pslist to list PID’s of Notepad

3. Usando o PID, agora execute o pskill, fornecendo o PID como último argumento.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p password 1984
The output of pskill for a particular PID

4. Por fim, verifique se ainda há uma instância do Bloco de Notas em execução, executando novamente o pslist. Agora você deverá ver apenas uma única instância do Bloco de Notas em execução.

Output of pslist

Matando Processos Remotos do Windows com TaskKill por Nome

A ferramenta taskkill é nativa do Windows e inclui mais opções de linha de comando para reiniciar processos por nome de usuário e nome de aplicativo. Vamos começar e matar o Bloco de Notas novamente!

Matar Processo por Nome

1. No seu servidor remoto, abra o Bloco de Notas; o Bloco de Notas é o processo que você irá matar nesta demonstração; você pode, é claro, substituir por outro processo.

2. Abra uma sessão do PowerShell ou prompt de comando no seu desktop. Digitando o seguinte comando irá matar o notepad.exe

taskkill /S WIN-BANGJIEFNOC.local.net /you administrator /p password /IM notepad.exe

A saída é mostrada abaixo:

/IM é o parâmetro para Imagem; neste caso, é notepad.exe

The output of taskkill command

3. Para confirmar que o processo está parado, execute tasklist. Agora você não deverá ver tarefas que correspondam a esse filtro.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
Output of tasklist using imagename

Matando Processos Remotos do Windows com TaskKill por PID

Matar um processo com taskkill usando um PID não é muito diferente de usar o nome do processo. Mas, como você não pode usar o nome, primeiro precisará encontrar o PID e depois passá-lo para taskkill.

Supondo que você tenha o Bloco de Notas em execução no seu host remoto do Windows:

1. Execute tasklist conforme mostrado abaixo para encontrar o PID do processo Notepad. Anote um dos PIDs conforme mostrado abaixo; você precisará disso para o próximo passo.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
the output of tasklist to view PIDS

2. Agora, execute taskkill fornecendo o PID como último argumento.

taskkill /S WIN-BANGJIEFNOC.local.net /u administrator /p 'password' /PID 3776
The output of taskkill specifying a particular PID

3. Por fim, execute tasklist para confirmar que o processo foi encerrado.

Output of tasklist

Encerrando um Processo Remoto do Windows com PowerShell

O PowerShell oferece algumas opções para encerrar processos remotos; o primeiro cmdlet Stop-Process não pode nativamente encerrar um processo remoto, pois não possui uma opção para especificar um nome de computador. No entanto, você pode contornar esse problema executando Stop-Process remotamente via PowerShell Remoting.

1. Se seu host e servidor remoto não estiverem em um domínio do Active Directory, primeiro forneça um nome de usuário e senha, criando um objeto PSCredential.

$credentials = Get-Credential
Setting up credentials

2. Em seguida, como o tutorial usará SSL para se conectar ao computador remoto e usará um certificado autoassinado, crie uma PSSessionOption que ignore a verificação do certificado para uma autoridade de certificação confiável.

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. Agora, conecte-se ao servidor com o comando Enter-PSSession, que estabelece uma sessão interativa com o servidor remoto.

O comando abaixo está se conectando ao computador WIN-BANGJIEFNOC.local.net usando o nome de usuário e a senha fornecidos acima (Credential), ignorando a verificação da autoridade de certificação (SessionOption) e conectando via SSL (UseSSL).

Enter-PSSession -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -SessionOption $PSSessionOption -UseSSL
Using Enter-PsSession for an interactive session

4. Depois de se conectar ao host remoto, verifique o processo que você deseja encerrar executando Get-Process. Neste caso, você verá o processo notepad.

Get-Process -ProcessName Notepad
Output of Get-Process

5. Para encerrar esse processo, execute Stop-Process, como mostrado abaixo.

Stop-Process -ProcessName Notepad

6. Finalmente, confirme que você encerrou o processo executando novamente Get-Process, e você deve receber uma mensagem de erro.

Checking for Notepad as a running process

Se desejar interromper um processo remoto do Windows de forma não interativa, use o Invoke-Command usando os seguintes parâmetros: Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL. Encapsular o comando Stop-Process no parâmetro ScriptBlock envia o comando para o host remoto.

Conclusão

Você aprendeu sobre diferentes métodos de encerrar processos remotos e como superar situações onde regras do firewall de rede podem impedir que utilitários funcionem corretamente; este tutorial também pode ter ajudado você a corrigir problemas no Windows.

Os utilitários sobre os quais você aprendeu são ferramentas potentes; use com cuidado!

Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/