
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 crontab
scheint 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 /proc
Verzeichnis 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/someprog
nach/usr/bin/someprog.orig
. - Erstellen Sie
/usr/bin/someprog
ein Skript wie:
#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
- Und dann
chmod 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