2010-08-17 7 views
4

Si quelqu'un pouvait s'il vous plaît me aider, ce serait génial :)CPU ID de processus

Cela semble être une question difficile. A partir de l'ID de processus, je dois être en mesure de saisir:

  1. Combien CPU processus prend en%
  2. Depuis combien de temps le processus a été en utilisant la CPU

Cela doit à écrire en Cocoa/Objective-C ou C. Il faut aussi travailler sur Tiger à travers Snow Leopard.

Merci!

+2

Vous avez oublié d'écrire "s'il vous plaît". – Eimantas

+0

Aussi, s'il vous plaît prendre note de mon édition (première ligne). –

Répondre

1

Une manière grossière serait d'engendrer une commande popen et d'obtenir une sortie de ps.

Ie comme ceci:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void get_process_info(int pid) { 
    char ps_cmd[256]; 
    sprintf(ps_cmd, "ps -O %%cpu -p %d", pid); // see man page for ps 
    FILE *fp = popen(ps_cmd, "r"); 
    if (fp) { 
    char line[4096]; 
    while (line == fgets(line, 4096, fp)) { 
     if (atoi(line) == pid) { 
     char dummy[256]; 
     char cpu[256]; 
     char time[256]; 

     // PID %CPU TT STAT  TIME COMMAND 
     // 32324 0,0 s001 S+  0:00.00 bc 

     sscanf(line, "%s %s %s %s %s", dummy, cpu, dummy, dummy, time); 
     printf("%s %s\n", cpu, time); // you will need to parse these strings 

     pclose(fp); 
     return; 
     } 
    } 
    pclose(fp); 
    } 
} 

int main() { 
    get_process_info(32324); 
    return 0; 
} 
+0

Cela semble calculer un peu lent. Je vais exécuter cela contre tous les processus actuellement sur la machine chaque seconde et cela peut ne pas être assez efficace. Je vous ai donné un vote pour l'effort si. Au moins, vous m'avez donné quelque chose :) –

+1

@Eric Si vous voulez obtenir ces données pour tous les processus, il peut être facilement optimisé. Laissez la commande 'ps' afficher tous les résultats et les analyser tous en même temps. Ce ne sera qu'un appel "popen" à chaque seconde. – epatel

+0

En ce moment j'appelle la méthode ci-dessus pour seulement l'App Focus chaque seconde, mais parfois quelques secondes passent sans valeur retournée. Est-ce que ça a du sens? Comment puis-je optimiser le code pour qu'il s'exécute rapidement sur au moins un processus? Merci beaucoup. Btw grand portefeuille! –

Questions connexes