Gibt es eine Möglichkeit, mithilfe von Standard-Linux / Unix-Tools zu bestimmen, wie viel ein Prozess im Benutzermodus ausgegeben hat und wie viel auf den Kernel gewartet wurde?
Mit anderen Worten, genau die Werte "user" und "sys", die Sie bei der Verwendung erhalten time
, aber während der Prozesslaufzeit?
HINWEIS: Eine Möglichkeit besteht darin, WBEM zu verwenden und Linux_UnixProcess aufzulisten. Ich muss jedoch ein anderes Tool als dieses verwenden. Mein Ziel ist es zu überprüfen, was der WBEM-Anbieter mir sagt, dh ich muss ein anderes Tool verwenden.
times(2)
und dastimes
eingebaute Ihrer Shell. Dastime
Schlüsselwort einiger Shells zeigt an sich auch die Zeiten an.times
geben Sie sowohl die Zeit des Prozesses als auch die Zeit seiner (toten und warteten) Kinder an.Antworten:
Unter Linux sind die Informationen in den Feldern 14 bis 17 von verfügbar ( Details
/proc/$pid/stat
siehe proc (5) ):Felder sind:
(Alle Threads eines bestimmten Prozesses haben dort die gleichen Werte.)
Sie werden nicht direkt von gemeldet
ps
.ps
meldet 14 + 15 mitps -o time
und14 + 15 + 16 + 17
mitps --cumulative -o bsdtime
./proc/$pid/stat
Beachten Sie, dass das zweite Feld in möglicherweise Leerzeichen oder Zeilenumbrüche enthält, sodass Sie es nicht mit awk's$1
,$2
... analysieren können.Sie können
perl
wie folgt verwenden :Ein Prozess kann seine eigenen Zeiten mit
getrusage(RUSAGE_SELF)
und abrufengetrusage(RUSAGE_CHILDREN)
.Es gibt auch einen
times
Systemaufruf, der dieselben Informationen abruft. POSIX-Shells haben dafür einentimes
eingebauten. Einige Shells liefern diese Informationen auch mittime
(ohne Argumente).quelle
times
A) erlaubt mir nicht, separate Zeiten für jedes Kind zu sehen und B) scheint Zeiten nur von bereits gekündigten Kindern zu melden. Ich habe A gelöst, indem ich jedes Kind mit einem Bash-Skript umschlossen habe, das Kind aufruft und dann nur mal meldet, aber immer noch; Aufgrund von B besteht bestenfalls die notwendige Lücke: 1. Messung durch WBEM, 2. Tötung, 3. Bericht lesen.