Eu tenho um processo Java em execução em uma instância do RedHat Linux.
O problema é que continua reaparecendo depois que eu o mato. Não sei para onde olhar. Eu já fui ao crontab, mas sem sorte.
Eu olhei para o PPID, mas aponta para init (1).
Alguma idéia de como posso descobrir a fonte?
ps xf
mostrar a árvore do processo? Tal como está, temos muito pouco a seguir.at
se algum deles é esse ?.Respostas:
Existem várias possibilidades (algumas mencionadas em outras respostas):
/etc/inittab
entrada para o serviço com orespawn
diretiva,Restart
opção definida como um valor diferente deno
,respawn
diretiva,monit
, ouUma nova ferramenta interessante (somente Linux) que poderia fornecer mais informações sobre onde o processo está sendo iniciado é o sysdig .
O Sysdig usa os recursos de ponto de rastreamento do Linux Kernel para fornecer o que equivale a um sistema rápido e amplo
strace
.Por exemplo, se eu quisesse ver todos os processos sendo iniciados
ls
, posso emitir:Quando
ls
é executado em algum lugar, vou receber uma mensagem como esta:Trunquei as informações do ambiente retornadas, mas como você pode ver, no ptid posso ver o nome e o pid do programa chamado execve.
execve
é a chamada de sistema usada no Linux usada para executar novos comandos (todas as outras chamadas de exec são apenas frontends para execve).fonte
Eu acredito que você poderia usar
pstree
. Você pode especificar o comando como,O texto acima fornece uma lista de todos os pais dos aplicativos java.
fonte
Você pode dar uma olhada no seu PPID (ID do processo pai):
Depois de obter o PPID (segunda coluna) do seu processo Java, use
ps
novamente para encontrar o processo associado:Edit : se o pai é 1 (init), o primeiro pai do seu processo Java morreu logo após "dar à luz" (que triste). Por esse motivo, não é possível usar a hierarquia de processos atual para encontrá-la. A primeira coisa que eu recomendo que você faça é verificar
ps -ef
. Você pode encontrar o culpado apenas lendo a saída.Então, dê uma olhada nos crontabs (você já fez isso, mas não vai doer):
Isso exigirá privilégios de root.
Ainda não consegue ver um processo Java agendado? Que droga. Vamos tentar outra coisa. Se o seu processo Java estiver presente desde a inicialização, consulte os programas selecionados no momento da inicialização. Eu sugeriria algo como ...
Se você ainda não consegue encontrar nada, então ... Bem, eu admito que estou ficando sem idéias. Você realmente deve dar uma olhada
ps -ef
e localizar processos associados aos programas baseados em Java. Você deve encontrar um daemon, ou um "iniciador", responsável pelo reaparecimento constante do seu processo Java.fonte
init
, eles são pelo menos órfãos . Ostate
especificador paraps
mostrará se eles são zumbis (por exemplo,ps -eo pid,ppid,state,comm
); o estado seráZ
.Se você não sabe quem é o pai, deve rastrear o sistema como auditd
você ativaria o registro com:
e depois em
/var/log/audit/audit.log
encontrar linhas como:(dividido em várias linhas para facilitar a leitura). Você está interessado
exe="/bin/dash"
e / oupid=18182
qual identifica o processo rouge que deseja procurar eppid=17176
qual identifica o pai que o executou.fonte