Como o Windows mata um processo exatamente?

10

Não estou familiarizado com como os processos são eliminados no Windows. No Linux, um kill "quente" envia um sinal (15) que o processo pode manipular instanciando um manipulador de sinal. Um cold kill é o sinal (9) que o sistema operacional manipula, matando o processo com força.

Como posso "matar" um processo no Windows? Como é tratado pelo sistema operacional e pelo processo? Quais ações o SO executa? Existe uma maneira de plataforma cruzada de responder a uma solicitação de interrupção / fechamento?

IttayD
fonte
1
Para os leitores: o sinal 15 é SIGTERM, 9 é SIGKILL.
user1686
Aceite uma resposta, se sua pergunta foi respondida.
Oliver

Respostas:

11

"Finalizar tarefa" (e taskkill) parece postar uma WM_CLOSEmensagem nas janelas do programa. (O mesmo é feito quando você clica no botão ×"Fechar".) Se o programa não sair em algum tempo, o usuário será solicitado a encerrar o programa com força.

"Kill Process" e taskkill /fuse TerminateProcess().

user1686
fonte
1
+1, WM_CLOSE enviado ao aplicativo; depois que o X pede ao usuário para forçar a eliminação, o Windows remove o processo do agendador, fecha todas as alças (que podem atrapalhar o processo se o kernel estiver processando uma dessas alças) e recupera o espaço de memória (esta é a versão realmente curta) do processo).
Chris S
A terceira maneira é ntsd -p <pid> -c q, que usa o ntsddepurador; Não tenho certeza do que acontece quando um programa é morto dessa maneira. ( pokes @Chris )
user1686
5
o que acontece se o programa não tiver uma janela?
IttayD
1
@IttayD: Então não há nenhuma entrada no Gerenciador de Tarefas para usar "Finalizar Tarefa" em :) Acabei de tentar taskkille ele responde com: "Esse processo só pode ser encerrado com força (com a opção / F)". Então sim, a única opção que resta é TerminateProcess().
user1686
1
@IttayD: Observe que no Windows, os serviços (daemons) são gravados de maneira diferente dos aplicativos do usuário; eles podem receber consultas de status e controlar solicitações do Service Manager, para que uma parada normal seja possível.
user1686
0

O Sysinternals (agora parte da Microsoft) oferece um utilitário chamado pskill, que pode ser usado na linha de comando para eliminar processos no sistema local ou em sistemas remotos.

A maneira usual de eliminar processos no Windows em um ambiente da GUI é usar o Gerenciador de Tarefas.

Pausado até novo aviso.
fonte
-1

Com o cygwin, você pode usar uma matança de plataforma cruzada!

Tony Roth
fonte