J'ai un processus Java exécuté sur une instance Linux RedHat.
Le problème est qu'il continue de réapparaître après que je l'ai tué. Je ne sais pas où chercher. Je suis déjà allé à crontab, mais pas de chance.
J'ai regardé le PPID, mais il pointe vers init (1).
Une idée comment je peux trouver la source?
ps xf
affichage de l'arbre de processus? À l'heure actuelle, nous avons très peu de choses à faire.at
si l'un d'eux est celui-là?.Réponses:
Il existe un certain nombre de possibilités (certaines mentionnées dans d'autres réponses):
/etc/inittab
entrée pour le service avec larespawn
directive,Restart
option définie sur une valeur autre queno
,respawn
directive,monit
, ouSysdig est un nouvel outil intéressant (uniquement pour Linux) qui pourrait fournir plus d'informations sur le point de départ du processus .
Sysdig utilise les fonctionnalités de tracepoint du noyau Linux pour fournir ce qui équivaut à un système rapide et étendu
strace
.Par exemple, si je voulais voir chaque processus démarrer
ls
, je peux émettre:Quand
ls
est exécuté quelque part, je recevrai un message comme celui-ci:J'ai tronqué les informations d'environnement retournées, mais comme vous pouvez le voir, dans le ptid, je peux voir le nom et le pid du programme appelant execve.
execve
est l'appel système utilisé sous Linux utilisé pour exécuter de nouvelles commandes (tous les autres appels exec ne sont que des frontends à exécuter).la source
Je pense que vous pourriez utiliser
pstree
. Vous pouvez spécifier la commande comme,Ce qui précède vous donnera une liste de tous les parents des applications java.
la source
Vous pouvez consulter son PPID (ID de processus parent):
Une fois que vous avez le PPID (deuxième colonne) de votre processus Java, utilisez à
ps
nouveau pour trouver le processus associé:Edit : si le parent est 1 (init), alors le premier parent de votre processus Java est mort juste après avoir "accouché" (c'est triste). Pour cette raison, vous ne pouvez pas utiliser la hiérarchie de processus actuelle pour la trouver. La première chose que je vous recommanderais de faire est de vérifier
ps -ef
. Vous pourriez trouver le coupable simplement en lisant la sortie.Ensuite, jetez un œil aux crontabs (vous l'avez déjà fait, mais cela ne fera pas de mal):
Cela nécessitera des privilèges root.
Vous ne voyez toujours pas de processus Java planifié? Dang it. Essayons autre chose. Si votre processus Java est présent depuis le démarrage, jetez un œil aux programmes schéludés au démarrage. Je suggérerais quelque chose comme ...
Si vous ne trouvez toujours rien, alors ... J'avoue que je suis à court d'idées. Vous devriez vraiment avoir un autre regard
ps -ef
et localiser les processus associés aux programmes basés sur Java. Vous devriez rencontrer un démon, ou un "lanceur", responsable de la réapparition constante de votre processus Java.la source
init
, ils sont au moins orphelins . Lestate
spécificateur àps
affichera s'il s'agit de zombies (par exemple,ps -eo pid,ppid,state,comm
); l'état le seraZ
.Si vous ne savez pas qui est le parent, vous devriez utiliser un traceur de système comme auditd
vous activez la journalisation avec:
puis dans les
/var/log/audit/audit.log
lignes de recherche comme:(divisé en plusieurs lignes pour plus de lisibilité). Vous êtes intéressé
exe="/bin/dash"
et / oupid=18182
identifiez le processus de rouge que vous souhaitez rechercher etppid=17176
identifiez le parent qui l'a exécuté.la source