2010-11-27 24 views

Répondre

5

Utilisez top ou ps.

Par exemple, ps aux listera tous les processus avec leur propriétaire, l'état, la mémoire utilisée, etc.

EDIT: faire avec C sous Linux, vous devez lire les fichiers de processus dans le proc système de fichiers. Par exemple, /proc/1/status contient des informations sur votre processus init (qui a toujours PID 1):

char buf[512]; 
unsigned long vmsize; 
const char *token = "VmSize:"; 
FILE *status = fopen("/proc/1/status", "r"); 
if (status != NULL) { 
    while (fgets(buf, sizeof(buf), status)) { 
     if (strncmp(buf, token, strlen(token)) == 0) { 
      sscanf(buf, "%*s %lu", &vmsize); 
      printf("The INIT process' VM size is %lu kilobytes.\n", vmsize); 
      break; 
     } 
    } 
    fclose(status); 
} 
+0

Hmm ... Et comment peut-il être fait avec C? =) – shybovycha

+0

@shybovycha, j'ai ajouté un extrait de code pour le rendre plus clair. –

+0

Wow! Génial! Merci beaucoup! J'ai déjà commencé à écrire du code simple mais merci quand même! – shybovycha

2

Mesurer la quantité de RAM un processus utilise est presque impossible. La difficulté est que chaque fragment de bélier n'est pas utilisé par un seul processus, et que tout le bélier utilisé par un processus ne l'est pas réellement. Par exemple, deux processus peuvent avoir des mappages partagés du même fichier, auquel cas toutes les pages qui sont dans le noyau pour le mappage «appartiennent» aux deux processus. Mais que se passe-t-il si seulement un de ces processus l'utilisait?

Les pages privées peuvent également être copiées à la copie si le processus est bifurqué ou si elles ont été mappées mais pas encore utilisées (voir le cas où un processus a une grande surface mais n'en a pas touché la majeure partie encore). Dans ce cas, quel processus "possède" ces pages?

Les processus peuvent également utiliser efficacement des parties de la mémoire tampon tampon et beaucoup d'autres types de tampons de noyau, qui ne sont pas «possédés» par eux.


Il y a deux mesures qui sont disponibles, qui sont de taille VM, (la quantité de mémoire le processus a tracé tout à l'heure) et la taille du jeu de résident (RSS). Aucun d'eux ne vous dit vraiment beaucoup sur la quantité de mémoire utilisée par un processus, car ils comptent tous les deux des pages partagées et ne comptent pas les pages non mappées.

Alors, y a-t-il une réponse? Certains d'entre eux peuvent être mesurés en examinant les structures de cartes de pages qui sont maintenant disponibles dans/proc (/ proc/pid/pagemap), mais il n'y a pas nécessairement une manière triviale de partager la "propriété" des pages partagées.

Voir la documentation de Linux/vm/pagemap.txt pour une discussion à ce sujet.