2010-02-16 6 views
3

j'ai un C++ application appelée ./blah (à laquelle j'ai le code source)C++ comprendre CPU/utilisation de la mémoire

quand je lance ./blah

je peux courir "top" et voir combien de mémoire & cpu "./blah" utilise. Maintenant

, est là de toute façon pour « ./blah » pour accéder à cette information elle-même? C'est à dire. quand je cours./blah, je le veux à chaque seconde décharge c'est CPU & Utilisation de la mémoire. Quelle bibliothèque devrais-je utiliser pour faire ceci?

Je suis sur MacOSX; mais je préfère une solution qui fonctionne aussi sur Linux.

Merci!

+2

Mac OSX et Linux sont compatibles Posix, IIRC. Vous ne trouverez pas de solution standard C++, mais une solution standard Posix devrait fonctionner pour vous. Je ne connais pas les appels, mais je serais surpris si cette information n'est pas disponible à partir d'une bibliothèque Posix-standard. – Steve314

Répondre

9

Vous voulez getrusage(). De l'man page:

int getrusage(int who, struct rusage *r_usage);

getrusage() renvoie des informations décrivant les ressources utilisées par le processus en cours, ou tous ses processus enfants pris fin. Le paramètre who est soit RUSAGE_SELF ou RUSAGE_CHILDREN. Le tampon auquel r_usage points sera rempli avec la structure suivante:

struct rusage { 
     struct timeval ru_utime; /* user time used */ 
     struct timeval ru_stime; /* system time used */ 
     long ru_maxrss;   /* integral max resident set size */ 
     long ru_ixrss;   /* integral shared text memory size */ 
     long ru_idrss;   /* integral unshared data size */ 
     long ru_isrss;   /* integral unshared stack size */ 
     long ru_minflt;   /* page reclaims */ 
     long ru_majflt;   /* page faults */ 
     long ru_nswap;   /* swaps */ 
     long ru_inblock;   /* block input operations */ 
     long ru_oublock;   /* block output operations */ 
     long ru_msgsnd;   /* messages sent */ 
     long ru_msgrcv;   /* messages received */ 
     long ru_nsignals;  /* signals received */ 
     long ru_nvcsw;   /* voluntary context switches */ 
     long ru_nivcsw;   /* involuntary context switches */ 
}; 
+0

+ 1 qui semble plus compatible POSIX que ma solution. –

+0

question Dumb: comment puis-je obtenir% cpu de cela? – anon

+0

Vous savez combien de temps utilisateur/système sont pris, divisez cela en temps réel et c'est combien de temps CPU vous avez utilisé, non? –

1

Linux fournit ces informations dans:

/proc/<pid>/stat 

Et vous pouvez obtenir le pid en cours avec:

getpid() 

Retours pid_t.

est ici un morceau de code que j'ai trouvé afficher cette information dans un format raisonnable: http://brokestream.com/procstat.html

Je ne sais pas si cela fonctionne sur Mac OSX.

EDIT: Mac OS X ne dispose pas d'un système de fichiers procfs donc cela ne fonctionnera pas pour Mac OSX, désolé!

+0

Non '/ proc' sur OS X J'ai peur. –

+0

@Carl merci, j'ai fait un rapide Google et édité cela avant que j'ai vu votre commentaire. Il y a une meilleure solution ci-dessous aussi. –