Wenn ein Prozess ausgehungert wird, wäre die Selbstüberwachung für diesen Prozess nicht so produktiv. Wenn Sie jedoch nur bemerken möchten, dass dieser Prozess seit einiger Zeit nicht mehr ausgeführt wird, kann er periodisch times
aufrufen und die relative Differenz in der verstrichenen Zeit mit der relativen Differenz in der geplanten Benutzerzeit vergleichen (Sie würden die Felder tms_utime
und tms_cutime
summieren) Wenn Sie das Warten auf Kinder als produktive Zeit zählen möchten, würden Sie in den Feldern tms_stime
und tms_cstime
zählen, wenn Sie die in Ihrem Auftrag verbrachte Kernelzeit zählen, um produktiv zu sein. Für Thread-Zeiten ist die einzige Möglichkeit, die ich kenne, das /proc
Dateisystem zu konsultieren.
Ein externer Prozess mit hoher Priorität oder Thread mit hoher Priorität könnte Prozesse (und Threads) von Interesse extern überwachen, indem er die entsprechenden /proc/<pid>/stat
Einträge für den Prozess liest (und /proc/<pid>/task/<tid>/stat
für die Threads). Die Benutzerzeiten befinden sich in den Feldern 14 und 16 der Datei stat
. Die Systemzeiten befinden sich in den Feldern 15 und 17. (Die Feldpositionen sind genau für meinen Linux 2.6 Kernel.)
Zwischen zwei Zeitpunkten bestimmen Sie die verstrichene Zeit, die verstrichen ist (ein Überwachungsprozess oder ein Thread würde normalerweise in regelmäßigen Abständen aufwachen). Dann stellt der Unterschied zwischen den kumulativen Verarbeitungszeiten an jedem dieser Zeitpunkte dar, wie viel Zeit der Thread von Interesse während dieser Zeit laufen hat. Das Verhältnis von Verarbeitungszeit zu verstrichener Zeit würde die Zeitscheibe darstellen.
Ein letztes Stück Info: Unter Linux verwende ich folgendes für die Prüfung der richtigen task
im /proc/<pid>/task/
Verzeichnis der tid
des aktuellen Threads zu erhalten:
tid = syscall(__NR_gettid);
Ich tue dies, weil ich kann nicht finden Sie den Systemaufruf gettid
tatsächlich von einer beliebigen Bibliothek auf meinem System exportiert, obwohl es dokumentiert wurde. Aber vielleicht ist es bei Ihnen erhältlich.