2010-03-03 12 views
6

Buduję oprogramowanie do programowania oprogramowania. Program użytkownika jest odbierany przez nasz system oceniania i jest oceniany przez kompilowanie go i uruchamianie go za pomocą fork() i exec(). Proces nadrzędny czeka na dziecko (proces składania), aby zakończyć, a następnie czyści go.Statystyka procesu pomiarowego w systemie Linux

Aby podać przydatne informacje o przebiegu programu, chcę zmierzyć czas procesora i pamięć szczytową używaną przez program. Czy jądro Linuksa śledzi te wartości? Czy istnieje inny sposób uzyskania tych informacji?

+2

Należy zachować ostrożność, aby nieuczciwy użytkownik mógł umieścić paskudną niespodziankę w swoim programie. –

+0

Ograniczamy maksymalny czas procesora, otwieramy pliki, itp., Używając setrlimit syscall, więc nie sądzę, że użytkownik może wyskoczyć jakieś nieprzyjemne niespodzianki :) – donatello

Odpowiedz

6

Jeśli zadzwonisz wywołanie systemowe wait4() czerpać dziecko, gdy się zakończy, to będzie wypełnij strukturę struct rusage przy użyciu zasobów dziecka (ru_utime i ru_stime utrzymaj czas użytkownika i systemowy procesora używany przez dziecko).

0

Niskim technicznym (ale łatwym) rozwiązaniem jest okresowe zrzucanie wyjścia top w trybie wsadowym i późniejsze analizowanie.

-1

Możesz sprawdzić polecenie górne. To może być pomocne.

+0

Czy byłoby lepiej, gdyby wyjaśniono zasadę? Wiem, że ludzie napisali lepsze odpowiedzi na to pytanie, ale nie sądzę, aby ta odpowiedź była całkowicie nieistotna lub błędna. Proszę, popraw mnie jeśli się mylę. – Jay

+0

To brzmi jak rozwiązanie jest zautomatyzowane. top to program użytkownika końcowego, który nie nadaje się do automatyzacji. –

0

Czas (1) może pomóc, jak sądzę. Jest o wiele prostszy niż górny głosowanie.

Fragment ze strony człowieka:

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). 
Powiązane problemy