Terminar um processo do CMD: o mais suave para o mais difícil
Menos / Mais Suave
1) taskkill / im nome do processo.exe
2) Processo wmic em que nome="processname.exe " terminar a chamada
3) processo wmic em que nome='processname.exe ' delete
4) taskkill / f / im processname.exe
Mais/Mais Difícil
estou a tentar criar um ficheiro de comando em lote e queria apenas saber a diferença entre estes, para ver qual devo usar. Eu prefiro usar um close mais suave, verificar para ver se o processo ainda está em execução, e, em seguida, tentar um close mais difícil, e, em seguida, repetir isso até que o o programa é fechado com sucesso. Qualquer informação sobre a diferença entre qualquer um destes seria útil, especialmente entre usar terminate e delete via CMD: WMIC seria útil, como eu não consigo encontrar documentação em nenhum lugar sobre eles.
1 answers
Como o CatCat mencionou, há duas maneiras principais de terminar um processo: WM_CLOSE
e TerminateProcess()
. Incluí mais dois por ser completo.
-
A enviar a mensagem da janela
WM_CLOSE
para a janela principal do processo. Esta é a mesma mensagem que uma aplicação recebe quando o utilizador carrega no botãoX
para fechar a janela. O aplicativo pode então graciosamente desligar ou pedir confirmação ao usuário-por exemplo, se algum trabalho não for gravado.taskkill
Sem/f
aparecer tentar fazer isso, mas parece nem sempre ter sucesso em encontrar a janela correta para fechar. Se o aplicativo é suposto não ter uma janela visível (como se ele só exibe um ícone na bandeja do sistema ou é um servidor sem janelas), ele pode ignorar esta mensagem completamente.Se
taskkill
não funciona para ti, é possível NirCmd: faz melhor trabalho:NirCmd.exe closeprocess iexplore.exe
-
Também há
WM_ENDSESSION
mensagem-é enviado pelo SO ao desligar (depoisWM_QUERYENDSESSION
). Ele funciona praticamente da mesma maneira, exceto que é enviado para toda a aplicação em vez de uma janela específica. Dependendo dos parâmetros, os aplicativos podem ser solicitados para salvar o trabalho em arquivos temporários, porque o sistema precisa reiniciar para aplicar algumas atualizações. Algumas aplicações reagem a esta mensagem, outras Não.Deveria ser possívelenviar estas mensagens manualmente, mas não o vi feito para além de testar como o app reage ao desligamento sem realmente a desligar o sistema operativo.
-
WM_QUIT
a mensagem sugere que a aplicação como um todo precisa ser desligada (mais especificamente, ela é enviada para um thread). Uma aplicação deve normalmente postá-lo para si mesmo depois de sua janela é feito fechando e agora é hora de terminar o processo. -
TerminateProcess()
diz ao sistema operacional para encerrar o processo com força. Isto é o que acontece quando você carrega no botãoEnd process
na páginaprocesses
na páginatask manager
. O processo não é notificado está sendo fechado - é apenas parado onde foi e removido da memória - sem perguntas, sem desligamento, etc. Isso pode causar corrupção se alguns arquivos estavam sendo escritos naquela época ou dados transferido.Isso é o que
taskkill /f
comando faz. Tantowmic process call terminate
Comowmic process delete
parecem também fazer isto embora eu não tenha a certeza.