2010-03-03 13 views
6

Estoy creando software de concurso de programación. Nuestro sistema de evaluación recibe un programa de usuario y se evalúa compilándolo y ejecutándolo a través de un fork() y un exec(). El proceso principal espera a que el hijo (proceso de envío) salga y luego lo limpia.Estadísticas del proceso de medición en Linux

Para dar información útil acerca de la ejecución del programa, quiero medir el tiempo de CPU y la memoria pico utilizados por el programa. ¿El kernel de Linux realiza un seguimiento de estos valores? ¿Hay alguna otra forma de obtener esta información?

+2

Tenga cuidado al hacer esto, un usuario deshonesto podría poner una desagradable sorpresa en su programa. –

+0

Restringimos el tiempo máximo de CPU, los archivos abiertos, etc., utilizando el strigital syscall, por lo que no creo que el usuario pueda lanzar sorpresas desagradables :) – donatello

Respuesta

6

Si se llama a la llamada wait4() sistema para cosechar el niño cuando termina, lo hará complete una estructura struct rusage con el uso de recursos del hijo (ru_utime y ru_stime mantenga el tiempo de CPU del usuario y del sistema utilizado por el niño, respectivamente).

0

Una solución de baja tecnología (pero fácil) es volcar periódicamente la salida de top en modo de lotes y analizarla posteriormente.

-1

Puede marcar el comando superior. Eso podría ser de alguna ayuda.

+0

¿Sería mejor si se explica el downvote? Sé que la gente ha publicado mejores respuestas para esta pregunta, pero no creo que esta respuesta haya sido totalmente irrelevante o incorrecta. Por favor, corríjame si estoy equivocado. – Jay

+0

parece que la solución está automatizada. arriba es un programa para el usuario final, no adecuado para la automatización. –

0

El programa de tiempo (1) puede ayudar, supongo. Es mucho más simple que la votación superior.

Un extracto de la página del manual:

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). 
Cuestiones relacionadas