Salut,
Bon, alors pour Windows XP, il faut... Nan je déconne !
Chez Linux, ils sont fans des fichiers. Donc les infos sur l'états des processus sont stockées dans des fichiers.
Je sais pas s'il y a mieux genre des commandes qui aide, mais j'ai pas trouvé (A part
sysinfo, mais ça ne donne que des infos sur globales, pas par fichier).
Toutes les infos sont dans /proc. Ce répertoire contient un répertoire
par processus (Les noms des répertoires sont les PID des processus),
plus quelques autres trucs. Parmis ces autres trucs, il y a le fichier
meminfo qui contient des info sur la mémoire, mais là aussi au niveau
du système.
La mémoire consommées des processus est dans /proc/[pid]/stat. Ce
fichier contient des données "aisément" accessibles via un fscanf. Plus
précisément, c'est vsize et rss qui risquent de t'intéresser. Tout le
contenu des fichiers de /proc est détaillé
ici.
J'ai essayé, voilà ce que ça à donné (Je précise que je suis Windowsien de naissance) :
#include "stdio.h"
int main(int argc, char ** argv)
{
FILE * lpFile;
char lpFileName[256];
int i;
long li, rss;
unsigned long u, vmem;
char state;
char buffer [1024];
if (argc != 2)
{
printf("Cette commande prend un PID en paramètre\n");
return 1;
}
sprintf(lpFileName, "/proc/%s/stat", argv[1]);
lpFile = fopen(lpFileName, "r");
if (! lpFile)
{
printf("Ouverture du fichier %s impossible\n", lpFileName);
return 1;
}
/* pid, comm, state, ppid */
fscanf(lpFile, "%d %1023s %c %d", &i, buffer, &state, &i);
/* pgrp, session, tty_nr, tpgid */
fscanf(lpFile, "%d %d %d %d", &i, &i, &i, &i);
/* flags, minflt, cminflt, majflt, cmajflt */
fscanf(lpFile, "%lu %lu %lu %lu %lu", &u, &u, &u, &u, &u);
/* utime, stime, cutime, cstim */
fscanf(lpFile, "%lu %lu %ld %ld", &u, &u, &li, &li);
/* priority, nice, 0 */
fscanf(lpFile, "%ld %ld %ld", &li, &li, &li);
/* itrealvalue, starttime, vsize, rss, rlim */
fscanf(lpFile, "%ld %lu %lu %ld %lu", &li, &u, &vmem, &rss, &u);
printf("Le processus %s consomme :\n", buffer);
printf("%lu ko de mémoire virtuelle\n", vmem / 1024);
printf("%li pages -> %li ko (Pour des pages de 4 ko)\n", rss, rss * 4);
fclose(lpFile);
return 0;
}
3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08