2013-08-22 17 views
7

Dato un PID, come posso ottenere la memoria attualmente utilizzata da un processo? In particolare sto cercando:Memoria utilizzata da un processo sotto mac os x

  • La memoria fisica privata (RAM) utilizzata dal processo
  • Lo spazio di swap utilizzato dal processo

Ma io non sono interessato a file mappate e memoria condivisa . In breve, vorrei determinare quanta memoria (RAM e swap) sarebbe stata liberata terminando il PID.

+0

Dai un'occhiata a http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process –

+0

Grazie, ma questo articolo si riferisce a strumenti che non sono disponibili su mac (/ proc, pmap, smem, htop, gcore) o su cose come valgrind che non sono un'opzione. Sono principalmente alla ricerca di un modo per trovare, in modo programmatico, la memoria (RAM) e lo SWAP utilizzati da un processo. PS potrebbe funzionare, ma non lo segnala. Avrei dovuto etichettare ogg-c invece di cacao. Ma non sarebbe meglio. Le chiamate C/C++ sono buone così come possono essere collocate su una piattaforma MAC OS. –

risposta

4

È possibile utilizzare la chiamata task_info di Mach per trovare queste informazioni. Ecco il codice che funziona su OS X v10.9, e che ottiene la dimensione processo virtuale del processo in corso:

#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; 
    } 
} 

Penso che questo esclude segmenti di memoria condivisa, ma non sono sicuro.

4

Sarebbe utile? È possibile utilizzare il comando ps con varie opzioni per ottenere almeno alcune di queste cose:

ps -o rss -o vsz -o pid 

vi darà la dimensione residente insieme, la dimensione virtuale e l'ID del processo. Vedo dalla pagina man che -o paddr fornisce l'indirizzo di scambio, ma non vedo quale opzione fornisca la dimensione dello scambio.

+0

Grazie per la risposta. Credo che questo comando restituirà la dimensione dello spazio indirizzo? L'RSS include anche la memoria condivisa/mappata? (nota: '-p pid'). –

+2

O anche più semplice: 'ps -o rss, vsz, pid'. – kenorb