Ich arbeite mit der Überwachung einer Erlang-Anwendung und versuche gerade herauszufinden, wie lange eine bestimmte PID läuft. Der absolute Zeitstempel oder die Dauer würde für mich funktionieren, aber ich sehe keines dieser Daten in process_info oder über das sys-Modul. Gibt es eine Möglichkeit, diese Informationen von der Erlang VM zu erhalten?Wird erlang aufgezeichnet, wenn ein Prozess gestartet wurde?
Ich kann die Startzeit der gesamten VM aus dem Befehl ps erhalten, aber das hat keine Sichtbarkeit einzelner Erlang-Prozesse.
Edit:
Ich habe bemerkt, dass, wenn die VM stürzt ab, die erl_crash.dump einen gestarteten Zeitstempel für jeden Prozess enthält, so dass ich weiß, dass es da drin ist!
Alternativ (und vielleicht das Offensichtliche): Sie könnten das Startdatum im Prozesszustand (in 'gen_server: init') beibehalten und die Differenz mit 'erlang: now' zurückgeben, wenn Sie gefragt werden. –
Abgesichert, speichern Sie, dass Sie 'os: timestamp/0' anstelle von' erlang: now/0' verwenden sollten. 'now/0' braucht leider eine globale Sperre, um sicherzustellen, dass die Rückgabe monoton ansteigt und einzigartig ist. – troutwine
Ich würde das gerne machen, aber es ist nicht meine Anwendung, ich beobachte es nur, so dass ich in der App selbst keine Änderungen vornehmen kann. Ich starte eine zweite VM und sende Befehle über rpc: call. – Joe