2010-03-03 4 views
6

Ich baue Programmierwettbewerb Software. Ein Benutzerprogramm wird von unserem Bewertungssystem empfangen und ausgewertet, indem es kompiliert und über eine fork() und exec() ausgeführt wird. Der übergeordnete Prozess wartet darauf, dass der untergeordnete Prozess (der Prozess des Absendens) beendet wird, und bereinigt ihn anschließend.Messung von Prozessstatistiken in Linux

Um nützliche Informationen über den Programmablauf zu erhalten, möchte ich die CPU-Zeit und den Spitzenspeicher des Programms messen. Verfolgt der Linux-Kernel diese Werte? Gibt es eine andere Möglichkeit, diese Informationen zu erhalten?

+2

Seien Sie vorsichtig dabei, ein bösartiger Benutzer könnte eine böse Überraschung in sein Programm setzen. –

+0

Wir beschränken die maximale CPU-Zeit, Dateien öffnen, etc, mit dem Setrlimit Syscall, so glaube ich nicht, dass der Benutzer keine bösen Überraschungen springen kann :) – donatello

Antwort

6

Wenn Sie das wait4() Systemaufruf rufen Sie das Kind zu ernten, wenn es fertig ist, wird es füllen Sie eine struct rusage Struktur mit der Ressourcennutzung des Kinds aus (ru_utime und ru_stime halten Sie die Benutzer- bzw. System-CPU-Zeit, die vom Kind verwendet wird).

0

Eine einfache (aber einfache) Lösung besteht darin, die Ausgabe von top regelmäßig im Batch-Modus zu speichern und anschließend zu parsen.

-1

Sie können den oberen Befehl überprüfen. Das könnte helfen.

+0

Wäre besser, wenn der Downvote erklärt wird? Ich weiß, dass die Leute bessere Antworten für diese Frage gepostet haben, aber ich denke nicht, dass diese Antwort völlig irrelevant oder falsch war. Bitte korrigieren Sie mich, wenn ich falsch liege. – Jay

+0

es klingt wie die Lösung ist automatisiert. top ist ein Endbenutzerprogramm, das nicht für die Automatisierung geeignet ist. –

0

Die Zeit (1) Programm kann helfen, denke ich. Es ist viel einfacher als Polling-Top.

Ein Auszug aus der Manpage:

Disregarding the 
    name of the utility, GNU makes it output lots of useful information, 
    not only about time used, but also on other resources like memory, I/O 
    and IPC calls (where available).