Wie man ein Programm von Anfang an verfolgt, ohne es als root auszuführen

Ich schreibe ein Tool, das DTrace aufruft, um das vom Benutzer angegebene Programm zu verfolgen.

Wenn mein Tool dtrace -c verwendet, um das Programm als Unterprozess von DTrace auszuführen, kann ich dem Programm nicht nur keine Argumente übergeben, sondern das Programm wird mit allen Berechtigungen von DTrace ausgeführt - also als root (ich bin aktiv) Mac OS X). Dies führt dazu, dass bestimmte Dinge, die funktionieren sollten, kaputt gehen, und es ist offensichtlich, dass sehr viele Dinge, die nicht funktionieren sollten, möglich sind.

Die andere mir bekannte Lösung besteht darin, das Programm selbst zu starten und es durch Senden anzuhaltenSIGSTOP, übergeben Sie die PID andtrace -pund fahren Sie mit dem Senden fortSIGCONT. Das Problem ist, dass entweder das Programm einige Sekunden lang ausgeführt wird, ohne dass es verfolgt wird, während DTrace die Symbolinformationen sammelt, oder dass DTrace dies beanstandet, wenn ich einige Sekunden lang schlafe, bevor der Vorgang fortgesetzt wirdobjc<pid>:<class>:<method>:entry Stimmt mit keinen Sonden überein.

Gibt es eine Möglichkeit, das Programm unter dem Benutzerkonto auszuführen, nicht als Root, aber DTrace kann es trotzdem von Anfang an verfolgen?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage