Realmente matando um processo no Windows

Ocasionalmente, um programa em uma máquina Windows fica louco e simplesmente trava. Então, eu chamo o gerenciador de tarefas e clico no botão “Finalizar processo”. No entanto, isso nem sempre funciona; se eu tentar várias vezes, normalmente ele irá morrer eventualmente, mas eu realmente gostaria de ser capaz de matá-lo imediatamente. No Linux eu poderia apenas kill -9 para garantir que um processo irá morrer.

Isso também pode ser usado para escrever scripts em lote e escrever scripts em lote é programação.

Existe algum programa ou comando que vem com o Windows que sempre irá matar um processo? Um aplicativo gratuito de terceiros seria ótimo, embora eu prefira poder fazer isso em máquinas nas quais me sento pela primeira vez.

“Finalizar processo” na guia Processes-Process chama TerminateProcess que é a maneira mais definitiva do Windows sabe para matar um processo.

Se ele não desaparecer, ele está atualmente bloqueado aguardando algum recurso do kernel (provavelmente um driver defeituoso) e não há nada (com exceção de uma reboot) que você possa fazer para fazer o processo desaparecer.

Dê uma olhada nesta input de blog de wayback quando: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

Sistemas baseados em Unix, como o Linux, também têm esse problema onde os processos podem sobreviver a um kill -9 se estiverem no chamado “Uninterruptible sleep” (mostrado por top e ps como state D), ponto no qual os processos dormem tão bem que podem t processar sinais de input (que é o que mata faz – enviando sinais).

Normalmente, o sono ininterrupto não deve durar muito, mas como no Windows, drivers quebrados ou programas de espaço de usuário quebrados (vfork sem exec) podem acabar dormindo em D para sempre.

 taskkill /im myprocess.exe /f 

O “/ f” é para “força”. Se você conhece o PID, então você pode especificar isso, como em:

 taskkill /pid 1234 /f 

Muitas outras opções são possíveis, basta digitar taskkill /? para todos eles. A opção “/ t” mata um processo e qualquer processo filho; isso pode ser útil para você.

O Process Hacker tem várias maneiras de eliminar um processo.

(Clique com o botão direito do mouse no processo e vá para Miscellaneous-> Terminator.)

Obtenha o explorador de processos da sysinternals (agora Microsoft)

Process Explorer – Windows Sysinternals | Microsoft Docs

JosepStyons está certo. Abra o cmd.exe e execute

 taskkill /im processname.exe /f 

Se houver um erro dizendo:

ERRO: O processo “process.exe” com o PID 1234 não pôde ser finalizado. Razão: o access é negado.

tente executar o cmd.exe como administrador.

Um truque que funciona bem é append um depurador e, em seguida, encerrar o depurador.

No XP ou no Windows 2003, você pode fazer isso usando o ntsd que vem de fábrica:

 ntsd -pn myapp.exe 

O ntsd irá abrir uma nova janela. Basta digitar ‘q’ na janela para sair do depurador e retirar o processo.

Eu sei que isso funciona mesmo quando o gerenciador de tarefas não parece capaz de matar um processo.

Infelizmente, o ntsd foi removido do Vista e você precisa instalar as ferramentas de debugging (gratuitas) do Windows para obter um depurador adequado.

configure um comando AT para executar o gerenciador de tarefas ou o explorador de processos como SYSTEM.

 AT 12:34 /interactive "C:/procexp.exe" 

Se o explorador de processos estivesse em sua unidade C raiz, isso o abriria como SYSTEM e você poderia eliminar qualquer processo sem receber nenhum erro de access negado. Defina isso por um minuto no futuro, então ele irá aparecer para você.

Quando o access ntsd for negado, tente:

O ZeroWave foi projetado para ser uma ferramenta simples que fornecerá uma finalização multinível de qualquer tipo de processo.

O ZeroWave também é um programa fácil de usar devido à sua instalação simples e sua interface gráfica muito amigável.

ZeroWave tem três modos de terminação e com o modo “INSANE” pode terminar qualquer tipo de processo que pode rodar no Windows.

Parece que ZeroWave não pode matar avp.exe