Onde posso ver uma lista de processos mortos no kernel?

31

Existe alguma maneira de verificar qual dos meus processos o kernel matou? Às vezes eu faço logon no meu servidor e descubro que algo que deveria ter sido executado durante toda a noite parou 8 horas e não tenho certeza se os aplicativos estão funcionando ou os kernels.

    
por Kit Sunde 25.03.2011 / 08:40

3 respostas

29

Se o kernel matou um processo (porque o sistema ficou sem memória), haverá uma mensagem de log do kernel. Verifique em /var/log/kern.log (no Debian / Ubuntu, outras distribuições podem enviar logs do kernel para um arquivo diferente, mas geralmente sob /var/log no Linux).

Observe que, se o OOM-killer (killer de falta de memória) for acionado, significa que você não possui memória virtual suficiente. Adicione mais troca (ou talvez mais RAM).

Algumas falhas de processo também são registradas nos registros do kernel (por exemplo, falhas de segmentação).

Se os processos foram iniciados a partir do cron, você deve ter um email com mensagens de erro. Se os processos foram iniciados a partir de um shell em um terminal, verifique os erros nesse terminal. Execute o processo em screen para ver o terminal novamente pela manhã. Isso pode não ajudar se o OOM-killer for acionado, porque ele pode ter matado o processo cron ou screen também; mas se você se deparou com o OOM-killer, esse é o problema que você precisa consertar.

    
por 25.03.2011 / 09:11
12

Contabilidade do processo pode ajudar aqui.

Em resumo:

apt-get install acct

Em seguida, experimente comandos como:

lastcomm
sa

ou no Ubuntu:

lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct

Veja:

UPDATE

Estranhamente, o arquivo pacct tem informações sobre o status de saída, mas nem lastcomm nem sa parecem imprimi-lo.

Então, até onde eu posso ver, você teria que escrever seu próprio programa em C para acessar as informações.

ATUALIZAÇÃO 2

Aqui está uma versão que imprime o código de saída.

Os dois últimos campos são "S" para sinalizado e "E" para o final, seguido pelo número do sinal ou status de saída.

Então, no seu caso, você provavelmente está procurando por "S 15", o que significa que tem um SIGTERM.

sleep                X mikel    stdin      0.00 secs Fri Mar 25 20:15 S  15

Comparado a "E 0", o que significa que o processo saiu sem erro.

true                   mikel    stdin      0.00 secs Fri Mar 25 20:16 E   0

Apenas minimamente testado.

por 25.03.2011 / 09:23
-1

sudo service --status-all

Este comando irá dizer-lhe quais são os serviços atualmente em execução e quais não estão iniciados ou parados ..

    
por 25.03.2011 / 13:01