Como Matar um Processo do Windows em um Sistema Remoto

Talvez você esteja trabalhando feliz em um servidor remoto com Windows e, de repente, perceba que um processo está se comportando de maneira incorreta, consumindo preciosos ciclos de CPU. O que você faz? Mate-o!

Neste tutorial, você aprenderá como encerrar um processo no 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 esses processos.

Pré-requisitos

Se você quiser acompanhar os passos deste tutorial, certifique-se de ter os seguintes itens antecipadamente:

  • 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.
  • Windows PowerShell 5 ou superior. Este tutorial utiliza o PowerShell v7.1.3

Consultando Processos Remotos no Windows com o Tasklist

Desde o Windows XP, existe uma ferramenta útil chamada tasklist. O Tasklist é uma ferramenta útil para consultar processos em computadores remotos. Antes de encerrar um processo, você deve primeiro identificá-lo!

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 no 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 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 único 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 Sysinternals Suite. Este conjunto de ferramentas existe há muitos anos e foi criado por Mark Russinovich, CTO da Azure!

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

1. Abra uma sessão do PowerShell ou prompt de comando em sua área de trabalho e altere o diretório para onde você extraiu o Sysinternal Suite.

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 o 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 a opção -s para transformar o pslist no 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 aceitar a 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 do processo, um valor crítico usado neste tutorial, o número do 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 da CPU disponível.

Os outros valores estã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 a opção -s, pressione Ctrl-C para sair do pslist e voltar ao console.

Reduza a lista de processos retornados usando a opção -e seguida pelo nome do processo, por exemplo, -e Winlogon.

Matar Processos Pelo Nome do Processo com o PSKill

Agora que você sabe como encontrar processos remotos, vamos agora aprender como encerrá-los. Para começar, vamos abordar a utilidade pskill . Primeiro, aprenda como encerrar processos pelo nome do processo.

1. Certifique-se de ter um processo que você pode encerrar em seu servidor remoto. Este tutorial usará o processo do Bloco de Notas como exemplo.

2. Abra uma sessão do PowerShell ou prompt de comando em sua área de trabalho local e mude o diretório para onde você extraiu o Sysinternal Suite. Em seguida, execute o seguinte comando. Você pode ver que a sintaxe para pskill é semelhante à 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 Pelo ID do Processo com o PSKill

Encerrar o processo pelo nome pode ser suficiente para suas necessidades se apenas uma instância desse processo estiver em execução ou se você deseja encerrar todos os processos com esse nome. E se você precisar encerrar uma instância específica de um processo em execução? Os passos a seguir demonstrarão isso.

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

2. Execute o seguinte comando, observando um dos Pid conforme mostrado abaixo; você precisará disso para a próxima etapa.

.\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 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 tem uma instância do Bloco de Notas em execução, executando novamente pslist. Agora você deve ver apenas uma única instância do Bloco de Notas em execução.

Output of pslist

Encerrando Processos Remotos do Windows com TaskKill por Nome

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

Encerrar Processo por Nome

1. No seu servidor remoto, abra o Bloco de Notas; o Bloco de Notas é o processo que você vai encerrar 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, você encerrará o notepad.exe

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

O resultado é mostrado abaixo:

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

The output of taskkill command

3. Para confirmar que o processo foi interrompido, execute tasklist. Agora você não deve ver nenhuma tarefa correspondente a esse filtro.

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

Encerrando Processos Remotos do Windows com TaskKill por PID

Encerrar 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 Windows remoto:

1. Execute tasklist conforme mostrado abaixo para encontrar o PID do processo Notepad. Anote um dos PID’s conforme mostrado abaixo; você precisará disso para a próxima etapa.

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 interrompido.

Output of tasklist

Encerrando um Processo Remoto do Windows com o 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 tem uma opção para especificar um nome de computador. No entanto, você pode contornar esse problema executando o Stop-Process remotamente via PowerShell Remoting.

1. Se o seu host e o 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 irá ignorar 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 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 deseja encerrar executando Get-Process. Neste caso, você verá o processo notepad.

Get-Process -ProcessName Notepad
Output of Get-Process

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

Stop-Process -ProcessName Notepad

6. Por fim, 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 você deseja interromper um processo do Windows remoto de forma não interativa, use o comando Invoke-Command usando os seguintes parâmetros: Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL. Ao encapsular o comando Stop-Process no parâmetro ScriptBlock, você envia o comando para o host remoto.

Conclusão

Você aprendeu sobre diferentes métodos de encerrar processos remotos e como superar situações em que regras de 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 que você aprendeu são ferramentas potentes; use com cuidado!

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