getrusage(2) getrusage(2)
NAME
getrusage - Informationen über die Verwendung von Ressourcen aufrufen
SYNTAX
#include <sys/time.h>
#include <sys/resource.h>
getrusage(ine who, struct rusage *rusage);
BESCHREIBUNG
getrusage gibt Informationen über die vom aktuellen Prozeß verwendeten
Ressourcen oder seiner beendeten Kindprozesse zurück. Die Interpreta-
tion für einige angezeigte Werte, wie beispielsweise ruidrss, hängen
vom Tick-Intervall der Systemuhr ab. Dieses Intervall ist ein von der
Implementierung abhängiger Wert.
Der Parameter who ist entweder RUSAGESELF oder RUSAGECHILDREN. Der
Puffer, auf den rusage verweist, wird mit der folgenden Struktur auf-
gefüllt:
struct rusage {
struct timeval ruutime; /* user time used */
struct timeval rustime; /* system time used */
int rumaxrss; /* maximum resident set size */
int ruixrss; /* currently 0 */
int ruidrss; /* integral resident set size */
int ruisrss; /* currently 0 */
int ruminflt; /* page faults not requiring physical I/O */
int rumajflt; /* page faults requiring physical I/O */
int runswap; /* swaps */
int ruinblock; /* block input operations */
int ruoublock; /* block output operations */
int rumsgsnd; /* messages sent */
int rumsgrcv; /* messages received */
int runsignals; /* signals received */
int runvcsw; /* voluntary context switches */
int runivcsw; /* involuntary context switches */
};
Die Felder werden folgendermaßen interpretiert:
ruutime Die Gesamtzeit, in der die Ausführung im Benutzermodus
stattfindet. Die Zeitdauer wird in Sekunden und Mikro-
sekunden angegeben.
rustime Die Gesamtzeit, in der die Ausführung im Systemmodus
stattfindet. Die Zeitdauer wird in Sekunden und Mikro-
sekunden angegeben.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getrusage(2) getrusage(2)
rumaxrss Die maximale resident eingestellte Größe. Die Größe
wird in Seiten angegeben (die Größe einer Seite, in
Byte, wird vom Systemaufruf getpagesize(3) angegeben).
Siehe auch HINWEISE.
ruixrss Gibt momentan 0 zurück.
ruidrss Ein "Integralwert", der die Größe des von einem Prozeß
während der Ausführung verwendeten Speichers angibt.
Dieser Wert ist die Summe der resident eingestellten
Größen des Prozesses bei einem Ticks der Systemuhr. Der
Wert wird in Seiten mal Ticks der Systemuhr angegeben.
Hinweis: Die gemeinsame Nutzung bleibt hierbei unbe-
rücksichtigt. Siehe auch HINWEISE.
ruisrss Gibt momentan 0 zurück.
ruminflt Die Anzahl der bearbeiteten Seitenfehler, für die keine
physische E/A-Aktivität erforderlich war. Siehe auch
HINWEISE.
rumajflt Die Anzahl der bearbeiteten Seitenfehler, für die eine
physische E/A-Aktivität erforderlich war. Dies kann
auch ein Vorauslesen der Seiten durch den Kern beinhal-
ten. Siehe auch HINWEISE.
runswap Die Anzahl der Auslagerungen eines Prozesses aus dem
Hauptspeicher.
ruinblock Die Anzahl der Eingaben des Dateisystems beim Bearbei-
ten einer Anforderung read(2).
ruoublock Die Anzahl der Ausgaben des Dateisystems beim Bearbei-
ten einer Anforderung write(2).
rumsgsnd Die Anzahl der über Sockets gesendeten Meldungen.
rumsgrcv Die Anzahl der über Sockets empfangenen Meldungen.
runsignals Die Anzahl der gesendeten Signale.
runvcsw Die Anzahl der Kontextumschaltungen aufgrund eines Pro-
zesses, der den Prozessor freiwillig freigibt, bevor
seine Zeitscheibe beendet wurde (normalerweise um die
Verfügbarkeit einer Ressource abzuwarten).
runivcsw Die Anzahl der Kontextumschaltungen aufgrund eines Pro-
zesses höherer Priorität, der nun ausgeführt werden
kann, oder aufgrund der Zeitscheibenüberschreitung des
aktuellen Prozesses.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getrusage(2) getrusage(2)
RÜCKGABEWERT
Ist der Aufruf erfolgreich, wird der Wert mit der entsprechenden
Struktur aufgefüllt und 0 zurückgegeben. Schlägt der Aufruf fehl, wird
-1 zurückgegeben.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
getrusage schlägt bei folgenden Bedingungen fehl:
EINVAL Der Parameter who ist kein gültiger Wert.
EFAULT Die vom Argument rusage angegebene Adresse ist kein gültiger
Bereich des Adreßbereichs des Prozesses.
HINWEISE
Die Zahlen ruinblock und ruoublock berücksichtigen nur die reale
Ein-/Ausgabe und sind bestenfalls ungefähre Werte. Daten, die vom
Caching-Mechanismus zur Verfügung gestellt werden, werden nur für den
ersten Prozeß, der Daten liest, und für den letzten Prozeß, der Daten
schreibt, berechnet.
Die resident eingestellte Größe wird nur geschätzt und gibt die tat-
sächliche resident eingestellte Größe möglicherweise nicht exakt wie-
der.
Seitenfehler können von verschiedenen Quellen und aus verschiedenen
Gründen generiert werden. Normalerweise wird ein Seitenfehler durch
einen direkten Verweis des Programms auf eine Seite erzeugt, die sich
nicht im Speicher befindet. Doch auch der Kern kann aufgrund von
Benutzereingaben Seitenfehler verursachen, beispielsweise beim Bear-
beiten von Systemaufrufen read(2) und write(2). Darüber hinaus kann
ein Seitenfehler auch von einer fehlenden Hardwareübersetzung in eine
Seite verursacht werden, obwohl sich die Seiten im physischen Speicher
befinden.
Neben festgestellten Hardwareseitenfehlern kann der Kern zum Zweck von
Aufräumarbeiten Pseudoseitenfehler verursachen. Der Kern kann bei-
spielsweise auch dann Seitenfehler erzeugen, wenn sich die Seiten im
physischen Speicher befinden, um Seiten zu sperren, die mit einer
E/A-Anforderung im Raw-Modus verbunden sind.
Nach der Definition erfordern schwerwiegende Seitenfehler eine physi-
sche Ein-/Ausgabe, während unkritische Seitenfehler keine physische
Ein-/Ausgabe erfordern. Beispielsweise würde die Anforderung der Seite
von der Freispeicherliste eine Ein-/Ausgabe verhindern und einen
unkritischen Seitenfehler erzeugen. Unkritische Seitenfehler treten
jedoch häufiger während des Prozeßstarts als Verweise auf Seiten auf,
die sich bereits im Speicher befinden. Wenn zum Beispiel ein Adreßbe-
reich einen Fehler in einem laufenden Programm oder in einer geteilten
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
getrusage(2) getrusage(2)
Bibliothek verursacht, werden unkritische Seitenfehler für den Adreß-
bereich erzeugt. Auch bei den Systemaufrufen read(2) oder write(2) für
Daten, die sich im Seiten-Cache befinden, wird ein oder mehrere unkri-
tische Seitenfehler erzeugt.
Es können keine Informationen über einen Kindprozeß abgerufen werden,
der noch nicht abgeschlossen ist.
SIEHE AUCH
sar(1M), read(2), times(2), wait(2), write(2), getpagesize(3),
gettimeofday(3C), resource(5), systime(5).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98