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.

image

Abriremos o arquivo TXT, que contém uma descrição textual sobre o memory dump.

image

Agora vou procurar pela minha sessão 52: utilize o Find –> “m_sessionId = 52”.

image

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 removed

  • Anonymous
    July 05, 2015
    Bom dia Estou esse problema, e não consigo matar o processo, alguém pode me ajudar?