2013-08-22 7 views
7

Wie lautet die PID, wie kann ich den aktuell von einem Prozess verwendeten Speicher abrufen? Speziell für die Suche:Speicher, der von einem Prozess unter Mac OS verwendet wird

  • Der private physischen Speicher (RAM) für den Prozess im
  • Der Swap-Speicher für den Prozess im

Aber ich bin nicht daran interessiert, Mapped-Dateien und Shared Memory . Kurz gesagt möchte ich feststellen, wie viel Speicher (RAM und Swap) durch Beenden der PID freigegeben würde.

+0

Werfen Sie einen Blick auf http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process –

+0

Vielen Dank, aber dieser Artikel bezieht sich zu Werkzeugen, die nicht auf Mac verfügbar sind (/ proc, pmap, smem, htop, gcore) oder zu Dingen wie valgrind, die keine Option sind. Ich bin hauptsächlich auf der Suche nach einer Möglichkeit, den Speicher (RAM) und SWAP, die von einem Prozess verwendet werden, programmatisch zu finden. PS könnte funktionieren, aber das meldet es nicht. Ich hätte object-c anstelle von Kakao getaggt. Aber es wäre nicht besser. C/C++ - Aufrufe sind gut so lange wie sie auf einer MAC OS-Plattform platziert werden können. –

Antwort

4

Sie können den Aufruf von task_info von Mach verwenden, um diese Informationen zu finden. Hier ist der Code, der auf OS X v10.9 funktioniert, und die bekommt die virtuelle Prozessgröße des aktuellen Prozesses:

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

Ich denke, dass diese Shared-Memory-Segmente ausschließt, aber ich bin mir nicht sicher.

4

Wäre das nützlich? Sie können die ps Befehl mit verschiedenen Optionen verwenden zumindest einige dieser Dinge zu bekommen:

ps -o rss -o vsz -o pid 

geben Ihnen die Resident Set Größe, die virtuelle Größe, und die Prozess-ID. Ich sehe von der man Seite, dass -o paddr die Swap-Adresse gibt, aber ich sehe nicht, welche Option Ihnen die Swap-Größe gibt.

+0

Vielen Dank für Ihre Antwort. Ich glaube, dass dieser Befehl die Adressraumgröße zurückgibt? Enthält RSS auch den freigegebenen/zugeordneten Speicher? (Anmerkung: '-p pid'). –

+2

Oder noch einfacher: 'ps -o rss, vsz, pid'. – kenorb