2010-03-03 6 views
6

Je construis un logiciel de concours de programmation. Le programme d'un utilisateur est reçu par notre système de jugement et est évalué en le compilant et en l'exécutant via fork() et exec(). Le processus parent attend l'exécution de l'enfant (processus de soumission), puis le nettoie.Statistiques de processus de mesure sous Linux

Pour donner des informations utiles sur l'exécution du programme, je souhaite mesurer le temps CPU et la mémoire crête utilisés par le programme. Est-ce que le noyau Linux garde une trace de ces valeurs? Y a-t-il un autre moyen d'obtenir cette information?

+2

Faites attention, un utilisateur malintentionné pourrait mettre une mauvaise surprise dans son programme. –

+0

Nous limitons le temps CPU maximum, les fichiers ouverts, etc, en utilisant le syscall setrlimit, donc je ne pense pas que l'utilisateur peut déclencher de mauvaises surprises :) – donatello

Répondre

6

Si vous appelez l'appel système wait4() pour récolter l'enfant quand il se termine, il sera remplir une structure struct rusage avec l'utilisation des ressources de l'enfant (ru_utime et ru_stime tenir l'utilisateur et le temps CPU système utilisé par l'enfant respectivement).

0

Une solution de faible technicité (mais facile) consiste à vider périodiquement la sortie de top en mode batch et à l'analyser ensuite.

-1

Vous pouvez vérifier la commande supérieure. Cela pourrait être utile.

+0

Serait-il préférable si le downvote est expliqué? Je sais que les gens ont affiché de meilleures réponses à cette question, mais je ne pense pas que cette réponse soit complètement hors de propos ou erronée. S'il vous plait corrigez moi si je me trompe. – Jay

+0

il semble que la solution est automatisée. top est un programme d'utilisateur final, non adapté à l'automatisation. –

0

Le programme time (1) peut aider, je suppose. C'est beaucoup plus simple que le sondage.

Un extrait de la page man:

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). 
Questions connexes