2013-08-22 7 views
7

के तहत एक प्रक्रिया द्वारा उपयोग की जाने वाली मेमोरी एक पीआईडी ​​को देखते हुए, मैं वर्तमान में किसी प्रक्रिया द्वारा उपयोग की जाने वाली मेमोरी कैसे प्राप्त कर सकता हूं? विशेष रूप से मैं देख रहा हूँ:मैक ओएस x

  • निजी भौतिक स्मृति (RAM) प्रक्रिया
  • स्वैप प्रक्रिया

द्वारा प्रयोग किया जाता अंतरिक्ष द्वारा इस्तेमाल किया लेकिन मैं मैप की फ़ाइलों और साझा स्मृति में कोई दिलचस्पी नहीं । संक्षेप में, मैं यह निर्धारित करना चाहता हूं कि पीआईडी ​​को समाप्त करके कितनी मेमोरी (रैम और स्वैप) मुक्त हो जाएगी।

+0

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

+0

पर एक नज़र डालें, लेकिन इस लेख संदर्भित करता है टूल्स जो मैक (/ proc, pmap, smem, htop, gcore) पर उपलब्ध नहीं हैं या वाल्ग्रिंड जैसी चीजों के लिए जो विकल्प नहीं हैं। मैं मुख्य रूप से एक प्रक्रिया द्वारा उपयोग की जाने वाली मेमोरी (रैम) और SWAP को खोजने का एक तरीका ढूंढ रहा हूं, प्रोग्रामेटिक रूप से। पीएस काम कर सकता है, लेकिन यह इसकी रिपोर्ट नहीं करता है। मुझे कोको के बजाए उद्देश्य-सी टैग किया जाना चाहिए था। लेकिन यह बेहतर नहीं होगा। सी/सी ++ कॉल अच्छे और साथ ही लंबे समय तक मैक ओएस प्लेटफ़ॉर्म पर रखे जा सकते हैं। –

उत्तर

4

आप इस जानकारी को खोजने के लिए Mach के task_info कॉल का उपयोग कर सकते हैं। यहाँ कोड है जो ओएस एक्स 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

क्या यह उपयोगी होगा? आप उन चीजों में से कम से कम कुछ प्राप्त करने के लिए विभिन्न विकल्पों के साथ ps आदेश का उपयोग कर सकते हैं:

ps -o rss -o vsz -o pid 

आप निवासी सेट आकार, आभासी आकार, और इस प्रक्रिया आईडी दे देंगे। मैं man पृष्ठ से देखता हूं कि -o paddr स्वैप पता देता है, लेकिन मुझे नहीं लगता कि कौन सा विकल्प आपको स्वैप आकार देता है।

+0

आपके उत्तर के लिए धन्यवाद। मेरा मानना ​​है कि यह आदेश पता स्थान का आकार वापस कर देगा? क्या आरएसएस में साझा/मैप की गई स्मृति भी शामिल है? (नोट: '-पी पिड')। –

+2

या यहां तक ​​कि सरल: 'ps -o rss, vsz, pid'। – kenorb