2013-08-22 16 views
7

PIDを指定すると、現在どのプロセスで使用されているメモリを取得できますか?具体的には、私を探しています:プロセス mac os xのプロセスで使用されるメモリx

  • プロセス
  • で使用されるスワップ領域が使用する

    • プライベート物理メモリ(RAM)しかし、私はマッピングされたファイルや共有メモリに興味がありません。要するに、PIDを終了することによってどれだけのメモリ(RAMとスワップ)が解放されるかを判断したいと思います。

    +0

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

    +0

    ありがとうございますが、この記事は参考になりましたMacで利用できないツール(/ proc、pmap、smem、htop、gcore)や、オプションではないvalgrindなどのツールにも適用できます。私は主に、プロセスによってプログラムで使用されるメモリ(RAM)とSWAPを見つける方法を探しています。 PSは機能するかもしれませんが、それは報告しません。私はカカオの代わりにobjective-cというタグをつけたはずです。しかしそれは良くないでしょう。 C/C++呼び出しは、MAC OSプラットフォーム上に置くことができる限り、良好です。 –

    答えて

    4

    Machのtask_info呼び出しを使用してこの情報を見つけることができます。ここではOS Xのv10.9上で動作するコードであり、現在のプロセスの仮想プロセス・サイズを取得している:

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

    私は、これは共有メモリ・セグメントを除外していることと思うが、私はわかりません。

    4

    これは便利でしょうか?あなたの常駐セットサイズ、仮想サイズ、およびプロセスIDを与える

    ps -o rss -o vsz -o pid 
    

    :あなたはそれらのものの少なくとも一部を取得するために様々なオプションをpsコマンドを使用することができます。 manページから、-o paddrはスワップアドレスを示していますが、スワップサイズを指定するオプションは表示されません。

    +0

    お返事ありがとうございます。私はこのコマンドがアドレス空間のサイズを返すと信じていますか? RSSには共有/マップされたメモリも含まれていますか? (注: '-p pid')。 –

    +2

    さらに単純です: 'ps -o rss、vsz、pid'。 – kenorb