Ich versuche, über den dynamischen Linker in allen Prozessen Startcode auszuführen.
Der Code sollte Dinge basierend auf dem nullten Argument des Prozesses tun. Ich erhalte die Argumente von /proc/self/cmdline
(wenn Sie einen besseren Weg kennen, außerhalb von main darauf zuzugreifen, sagen Sie es mir bitte), allerdings gibt es dabei ein Problem:
Skripte bekommen ihren Shebang (ohne #!
) als nulltes Argument und in diesem Fall interessiert mich das nächste Argument. Aber wie kann ich interpretierte Prozesse von nativen unterscheiden?
Antwort1
Die Details, die Sie extrahieren, /proc/self/status
finden Sie in /proc/self/comm
(ohne Skripting).
Für die Fragestellung: Festzustellen, welche Prozesseinterpretiertund welche sindeinheimisch, können Sie dies nicht tun, ohne zu wissen, welche ProzesseDolmetscher. Schließlich kann sich jeder Prozess durch einen exec
Aufruf selbst umbenennen und dabei beliebige Argumente für die Argumentliste des resultierenden Prozesses verwenden. Sie könntenerratendurch Vergleichen /proc/self/exe
(das auf die ausführbare Datei verweist) mit der Argumentliste, aber das wäre nur eine Vermutung, da es Beispiele gibt, bei denen ein Nicht-Interpreter seine Nachkommen umbenennt, nur um ihre Verwendung deutlicher zu machen.
Weiterführende Literatur:
Antwort2
Es scheint, dass Prozesse Name
in
</proc/self/status |grep '^Name'
basename
und der Name scheint der des echten nullten Arguments zu sein .
(Ich lasse die Frage hier, für den Fall, dass jemand eine bessere Antwort gibt).