Wie findet man heraus, warum ein Befehl/Code unter Linux ausgeführt wurde?

Wie findet man heraus, warum ein Befehl/Code unter Linux ausgeführt wurde?

Ich habe eine komplexe eingebettete Linux-Software, die auf einem Gentoo-Derivat läuft, auf dem ein bestimmter Code regelmäßig alle ~84 Minuten ausgeführt wird. Das Durchsuchen des Hauptcodes nach Stellen, an denen dieser Code ausgeführt werden könnte, war erfolglos und crontabscheint auch keine mögliche Erklärung zu bieten.

Meine Frage: Ist es möglich, durch Ändern des betreffenden Codes herauszufinden, welcher andere Prozess/Code/welche andere Datei/welcher andere Dienst ihn überhaupt gestartet hat? Gibt es im /procVerzeichnis Informationen, die ich verwenden kann? Oder ist es unmöglich, den Prozess herauszufinden, der den angegebenen Code ausgeführt hat?

Antwort1

Die Antwort von Chris würde funktionieren, wenn der Prozess lange dauert und Sie Zeit haben, ihn zu überprüfen. Handelt es sich jedoch um einen Befehl mit kurzer Laufzeit, kann es schwierig sein, ihn abzufangen, während der Prozess noch aktiv ist.

Eine andere Möglichkeit besteht darin, einen „Wrapper“ um das Programm zu legen.

Nehmen wir an, das aufgerufene Programm ist /usr/bin/someprog.

  • Ziehen /usr/bin/someprognach /usr/bin/someprog.orig.
  • Erstellen Sie /usr/bin/someprogein Skript wie:

 

#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
  • Und dannchmod a+x /usr/bin/someprog

Dadurch wird ein Prozessbaum erstellt und in eingefügt /tmp/someprog.log. Sie können sich dann den Baum ansehen und herausfinden, was ihn erzeugt.

Antwort2

Es hört sich an, als ob Sie nach der übergeordneten PID (PPID) suchen:

$ ps -o ppid -p 5743
 PPID
  219

Da Sie auch erwähnt haben, dass Sie /proc:

$ awk '{ print $4 }' /proc/5743/stat
219

verwandte Informationen