Terminar um processo do CMD: o mais suave para o mais difícil

A terminar um processo de CMD: mais suave a mais difícil Estava a pensar se alguém tinha experiência em usar a linha de comando para terminar processos usando taskkill e WIMC. Eu estava me perguntando se alguém sabia a ordem de quão "difícil" de um Fechar/terminar estes comandos são do comando que é o "mais suave "(menos forte) perto do comando que é o " mais difícil "(mais forte):

O meu palpite seria:

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.

Author: user149483, 2018-11-14

1 answers

Como o CatCat mencionou, há duas maneiras principais de terminar um processo: WM_CLOSE e TerminateProcess(). Incluí mais dois por ser completo.

  1. A enviar a mensagem da janelaWM_CLOSE para a janela principal do processo. Esta é a mesma mensagem que uma aplicação recebe quando o utilizador carrega no botão X 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

  2. Também háWM_ENDSESSION mensagem-é enviado pelo SO ao desligar (depois WM_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.

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

    É possívelcolocar manualmente a mensagem em cada linha de outro processo, mas isto é hackeado e raro, pode estoirar processos que não esperam ser emitidos esta mensagem de fora. Não sei se é melhor do que terminar o processo ou não.

  4. TerminateProcess() diz ao sistema operacional para encerrar o processo com força. Isto é o que acontece quando você carrega no botão End process na página processes na página task 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. Tanto wmic process call terminate Como wmic process delete parecem também fazer isto embora eu não tenha a certeza.

 1
Author: Jack White, 2018-11-14 22:24:11