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 (4)

  1. 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…

  2. Muito bacana o comportamento da engine com relação ao Kill.

  3. Flavio disse:

    Bom dia

    Estou esse problema, e não consigo matar o processo, alguém pode me ajudar?

Skip to main content