Onde posso ver uma lista de processos mortos pelo kernel?

33

Existe alguma maneira de verificar quais dos meus processos o kernel matou? Às vezes, faço logon no meu servidor e percebo que algo que deveria ter funcionado a noite toda só parou 8 horas e não tenho certeza se são os aplicativos ou os kernels.

Kit Sunde
fonte

Respostas:

30

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

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

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

Se os processos foram iniciados no cron, você deve receber 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 screenpara ver o terminal novamente pela manhã. Isso pode não ajudar se o OOM-killer for acionado, porque também pode ter matado o cron ou o processo de tela; mas se você encontrou o OOM-killer, esse é o problema que você precisa corrigir.

Gilles 'SO- parar de ser mau'
fonte
Como é a mensagem de interrupção do encadeamento /var/log/kern.log?
Bee
12

A Contabilidade de processos pode ajudar aqui.

Em resumo:

apt-get install acct

Em seguida, tente comandos como:

lastcomm
sa

ou no Ubuntu:

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

Vejo:

ATUALIZAR

Estranhamente, o pacctarquivo tem informações sobre o status de saída, mas lastcommnem saparece nem imprimi-lo.

Tanto quanto eu posso ver, você teria que escrever seu próprio programa 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 encerrado, seguidos pelo número do sinal ou status de saída.

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

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

Comparado com "E 0", o que significa que o processo foi encerrado sem erro.

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

Apenas minimamente testado.

Mikel
fonte
-1

serviço sudo --status-all

Este comando informará quais são os serviços atualmente em execução e quais não foram iniciados ou parados.


fonte