2013-08-22 4 views
7

Étant donné un PID, comment puis-je obtenir la mémoire actuellement utilisée par un processus? Plus précisément, je suis à la recherche pour:Mémoire utilisée par un processus sous mac OS x

  • La mémoire physique privée (RAM) utilisée par le processus
  • L'espace d'échange utilisé par le processus

Mais je ne suis pas intéressé par les fichiers mis en correspondance et la mémoire partagée . En bref, je voudrais déterminer combien de mémoire (RAM et swap) serait libéré en terminant le PID.

+0

Jetez un oeil à http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process –

+0

Merci, mais cet article se réfère aux outils qui ne sont pas disponibles sur mac (/ proc, pmap, smem, htop, gcore) ou à des choses comme valgrind qui ne sont pas une option. Je cherche principalement un moyen de trouver la mémoire (RAM) et SWAP utilisé par un processus, par programmation. PS pourrait fonctionner, mais il ne le signale pas. J'aurais dû marquer l'objectif-c au lieu du cacao. Mais ce ne serait pas mieux. Les appels C/C++ sont bons aussi longtemps qu'ils peuvent être placés sur une plate-forme MAC OS. –

Répondre

4

Vous pouvez utiliser l'appel de task_info de Mach pour trouver cette information. Voici le code qui fonctionne sur Mac OS X v10.9, et qui obtient la taille du processus virtuel du processus en cours:

#include <mach/mach.h> 
#include <mach/message.h> // for mach_msg_type_number_t 
#include <mach/kern_return.h> // for kern_return_t 
#include <mach/task_info.h> 
#include <stdio.h> 

int main(void) { 
    kern_return_t error; 
    mach_msg_type_number_t outCount; 
    mach_task_basic_info_data_t taskinfo; 

    taskinfo.virtual_size = 0; 
    outCount = MACH_TASK_BASIC_INFO_COUNT; 
    error = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&taskinfo, &outCount); 
    if (error == KERN_SUCCESS) { 
    // type is mach_vm_size_t 
    printf("vsize = %llu\n", (unsigned long long)taskinfo.virtual_size); 
    return 0; 
    } else { 
    printf("error %d\n", (int)error); 
    return 1; 
    } 
} 

Je pense que cela exclut les segments de mémoire partagée, mais je ne suis pas sûr.

4

Cela vous serait-il utile? Vous pouvez utiliser la commande ps avec diverses options pour obtenir au moins certaines de ces choses:

ps -o rss -o vsz -o pid 

vous donnera la taille du jeu résident, la taille virtuelle, et l'ID de processus. Je vois de la page man que -o paddr donne l'adresse d'échange, mais je ne vois pas quelle option vous donne la taille d'échange.

+0

Merci pour votre réponse. Je crois que cette commande va retourner la taille de l'espace adresse? RSS inclut-il également la mémoire partagée/mappée? (note: '-p pid'). –

+2

Ou même plus simple: 'ps -o rss, vsz, pid'. – kenorb