Ich habe einen Java-Prozess, der auf einer RedHat Linux-Instanz ausgeführt wird.
Das Problem ist, dass es immer wieder auftaucht, nachdem ich es getötet habe. Ich bin nicht sicher, wo ich suchen soll. Ich bin schon zur Crontab gegangen, aber kein Glück.
Ich habe mir die PPID angesehen, aber sie zeigt auf init (1).
Irgendeine Idee, wie ich die Quelle herausfinden kann?
ps xf
Prozessbaums anzeigen? So wie es aussieht, haben wir sehr wenig zu tun.at
, ob einer von denen derjenige ist?Antworten:
Es gibt eine Reihe von Möglichkeiten (einige werden in anderen Antworten erwähnt):
/etc/inittab
Eintrag für den Dienst mit derrespawn
Direktive,Restart
Option auf einen anderen Wert als "no
," gesetzt.respawn
Direktive,monit
oderSysdig ist ein interessantes neues Tool (nur für Linux), mit dem Sie einen genaueren Einblick erhalten, wo der Prozess gestartet wird .
Sysdig nutzt die Tracepoint-Funktionen des Linux-Kernels, um eine schnelle, systemweite Bereitstellung zu ermöglichen
strace
.Wenn ich zum Beispiel möchte, dass jeder Prozess startet
ls
, kann ich Folgendes ausgeben:Wenn
ls
irgendwo ausgeführt wird, erhalte ich eine Nachricht wie diese:Ich habe die zurückgegebenen Umgebungsinformationen abgeschnitten, aber wie Sie sehen, kann ich in der ptid den Namen und die pid des Programms sehen, das execve aufruft.
execve
wird der in Linux verwendete Systemaufruf zum Ausführen neuer Befehle verwendet (alle anderen exec-Aufrufe sind nur Frontends zum Ausführen).quelle
Ich glaube, du könntest es gebrauchen
pstree
. Sie können den Befehl wie folgt angeben:Oben finden Sie eine Liste aller übergeordneten Java-Anwendungen.
quelle
Sie können sich die PPID (übergeordnete Prozess-ID) ansehen:
Wenn Sie die PPID (zweite Spalte) Ihres Java-Prozesses erhalten haben,
ps
suchen Sie den zugehörigen Prozess erneut mit:Bearbeiten : Wenn das übergeordnete Element 1 (init) ist, ist das erste übergeordnete Element Ihres Java-Prozesses direkt nach der "Geburt" (wie traurig) verstorben. Aus diesem Grund können Sie die aktuelle Prozesshierarchie nicht verwenden, um sie zu finden. Das erste, was ich Ihnen empfehlen würde, ist zu überprüfen
ps -ef
. Sie können den Täter finden, indem Sie einfach die Ausgabe lesen.Dann schauen Sie sich Crontabs an (Sie haben es bereits getan, aber es tut nicht weh):
Dies erfordert Root-Rechte.
Sie können einen geplanten Java-Prozess immer noch nicht sehen? Verdammt noch mal. Versuchen wir etwas anderes. Wenn Ihr Java-Prozess seit dem Start vorhanden ist, schauen Sie sich die Programme an, die zum Startzeitpunkt erstellt wurden. Ich würde so etwas vorschlagen ...
Wenn Sie dann immer noch nichts finden können ... Nun, ich gebe zu, mir gehen die Ideen aus. Sie sollten sich die
ps -ef
mit Java-basierten Programmen verbundenen Prozesse wirklich genauer ansehen und sie suchen . Sie sollten auf einen Daemon oder einen "Launcher" stoßen, der für das ständige Auffrischen Ihres Java-Prozesses verantwortlich ist.quelle
init
, sind sie zumindest Waisen . Derstate
Spezifizierer,ps
der zeigt, ob es sich um Zombies handelt (zBps -eo pid,ppid,state,comm
); der Staat wird seinZ
.Wenn Sie nicht wissen, wer das übergeordnete Element ist, sollten Sie einen System-Tracer wie auditd verwenden
Sie aktivieren die Protokollierung mit:
und dann in
/var/log/audit/audit.log
find Zeilen wie:(Zur besseren Lesbarkeit in mehrere Zeilen unterteilt). Sie interessieren sich für
exe="/bin/dash"
und / oderpid=18182
identifizieren Ihren Rouge-Prozess, nach dem Sie suchen möchten, undppid=17176
identifizieren die Eltern, die ihn ausgeführt haben.quelle