Misterioso Comando KILL
Estou gastando o terceiro post para falar sobre o comando KILL. Se você não leu os outros, dê uma olhada:
1. Desafio: Comando KILL demorado (infinito)
2. Qual o significado de PREEMPTIVE_OS_PIPEOPS?
Dessa vez, vou mostrar como que o comando KILL realmente funciona e como que ele consegue “matar” os processos.
DBCC STACKDUMP
Sim, esse é o comando que usaremos. Antigamente existia um comando chamado DBCC PSS (Process Session Structure), mas dessa vez não tem jeito. Temos que usar alguns artifícios diferentes.
Ao rodar o comando:
DBCC STACKDUMP
Observamos que são gerados 3 arquivos no diretório do log.
Abriremos o arquivo TXT, que contém uma descrição textual sobre o memory dump.
Agora vou procurar pela minha sessão 52: utilize o Find –> “m_sessionId = 52”.
Essas são as propriedades da sessão (aos programadores C++, esse é um objeto chamado CSession e propriedade m_fKill ). Podemos até dizer que a DMV sys.dm_exec_sessions corresponde a lista completa de todos os objetos CSession.
Voltando ao assunto. Ao executar o comando KILL, ele apenas sinaliza a respectiva sessão para que ela aborte o quanto antes. Nessa situação, a verificação é feita logo depois da espera PREEMPTIVE_OS_PIPEOPS. O código fonte é semelhante com isso:
function xp_cmdshell ( process_name ) { CreateProcess( process_name );
SetStatus( SUSPENDED, PREEMPTIVE_OS_PIPEOPS );
WaitResponse( process.stdout ); SetStatus( RUNNING, NULL );
if ( this.m_fKill == 1 ) { abort(); } }
Conclusão: O comando KILL não mata ninguém. Ele serve apenas para mudar a flag m_fKill , que permite a própria sessão abortar a execução.
Comments
Anonymous
January 08, 2014
Interessante...sendo assim estou pensando em mandar um e-mail para o time de produto mudar o nome do comando KILL para KAMIKAZE...(a piadinha não ficou tão boa...rrsss)...já que ele não mata e apenas muda a flag da sessão para que ela aborte a execução. Valeu...Anonymous
January 09, 2014
Muito bacana o comportamento da engine com relação ao Kill.Anonymous
January 15, 2014
The comment has been removedAnonymous
July 05, 2015
Bom dia Estou esse problema, e não consigo matar o processo, alguém pode me ajudar?