O que acabei de matar?

6

Existe alguma maneira de descobrir o que acabei de matar?

$ ps -A -o pid,cmd | grep someApp | grep -v grep
2802 python someApp.py
$ sudo kill 2302
$

EDIT: Para esclarecer, preciso saber o que o PID 2302 era antes de matá-lo. A linha ps é para contextualizar como eu matei 2302 quando nem sei o que era.

    
por dotancohen 25.01.2013 / 14:50

3 respostas

8

Não há uma maneira geral de saber, mas você pode ter pistas.

Você enviou um sinal TERM, não um sinal KILL, de modo que o programa deixou a oportunidade de executar um manipulador de sinal. Pode não ter morrido, ou pode ter deixado uma entrada de log em algum lugar. Verifique se o processo ainda está em execução ( ps 2302 ) e, se não estiver, verifique os registros do sistema.

Existe um registro de todos os processos se você tiver contabilidade de processos ativada. Isso está disponível no Linux através da conta GNU , mas com a maioria das distribuições o pacote não é instalado por padrão. Se a contabilidade do processo estiver ativada, execute lastcomm (talvez seja necessário root) para ver os processos recentemente mortos (mais recentes primeiro). Com lastcomm , apenas o nome do comando é rastreado, não o PID ou os argumentos; você terá que descobrir qual é o processo por correspondência circunstancial. No Linux, lastcomm mostra a data em que o processo foi encerrado, mas apenas com uma granularidade de 1 minuto, e há um sinalizador X após o nome do comando se o comando foi morto por um sinal.

O GNU acct rastreia mais informações, incluindo o ID do processo, mas o comando lastcomm não o exibe: você precisa executar dump-acct , que infelizmente não indica se um comando foi morto por um sinal.

dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / *2302($| )/'

Existem outros subsistemas que podem registrar processos, como a auditoria do Linux, mas geralmente não estão configurados para isso.

    
por 25.01.2013 / 16:54
4

Não há um modo definitivo a menos que você use algo para registrar todos os processos gerados em seu sistema (como auditoria ou contabilidade de processo).

Agora, coisas que você pode tentar:

  • Esse processo pode ser uma coisa de registro (via syslog ou outro) incluindo seu pid, então você poderia fazer uma zgrep -w 2302 /var/log/**/*(.m-1) (sintaxe zsh) para tentar identificá-lo.
  • Ele ou seu pai pode ter logado algo para relatar a morte desse processo, você pode ver os arquivos que foram modificados desde o kill, para ver se eles contêm alguma pista (veja o .xsession-errors de cada graficamente usuário logado, em / var / log novamente, olhe para a saída lsof -nP para ver se há alguma entrada parecida com arquivos de log atualmente abertos ...) ...
  • Se não houver muitos processos sendo gerados nessa máquina, observe os pids próximos a 2302 e seu horário de início. 2302 pode ter sido um pai ou filho deles, ou ser comandos relacionados, pode dar uma indicação de qual usuário provavelmente gerou isso ...
  • caso tenha sido gerado em um terminal de algum usuário, você pode verificar se o tempo de modificação de qualquer dispositivo de terminal em /dev coincide com o tempo do kill, o que poderia ajudá-lo a restringir sua pesquisa ...
por 25.01.2013 / 16:56
3

Não, não há. Não depois, isto é.

Mas se você fizer uma lista "ps -A >" antes do comando kill, você terá um arquivo chamado list que contém uma lista de todos os processos que foram executados antes de matar o processo.

    
por 25.01.2013 / 14:55

Tags