2011-11-15 8 views
5

मैं चाहता हूं कि मेरा (सी/सी ++ आधारित) प्रोग्राम स्थानीय प्रणाली पर वर्तमान में कितनी प्रक्रियाएं मौजूद है, के एक संख्यात्मक संकेतक को प्रदर्शित करें। मेरे प्रदर्शन को अपडेट करने के लिए संख्या-चलने वाली प्रक्रियाओं की कीमत अक्सर पूछेगी (उदा। प्रति सेकंड एक बार)।क्या लिनक्स में प्रक्रियाओं की वर्तमान संख्या प्राप्त करने का हल्का तरीका है?

क्या यह संख्या पाने के लिए कोई हल्का तरीका है? जाहिर है, मैं "पीएस कुल्हाड़ी | wc -l" कह सकता हूं, लेकिन मैं कंप्यूटर को एक प्रक्रिया को बढ़ाने के लिए मजबूर नहीं करना चाहता हूं और एक पूर्णांक के साथ आने के लिए पाठ की कई सौ पंक्तियों को पार्स करना चाहता हूं।

यह प्रोग्राम मुख्य रूप से लिनक्स के तहत चल रहा है, लेकिन यह मैकोज़/एक्स या विंडोज के तहत भी चलाया जा सकता है, इसलिए उन ओएस के लिए प्रासंगिक तकनीक भी उपयोगी होगी।

आदर्श रूप में मैं लिनक्स के तहत this की तरह कुछ, उपलब्ध छोड़कर तलाश कर रहा हूँ

धन्यवाद, जेरेमी

+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/939778/linux-api-to-list-running-processes) –

+0

यहाँ की तरह: [http: //stackoverflow.com/questions/939778/linux-api-to-list-running-processes]? –

+1

हालांकि मैं चल रही प्रक्रियाओं की एक सूची नहीं चाहता हूं, बस एक गिनती। –

उत्तर

12

.... और मैं प्रश्न पोस्ट करने के 1 मिनट बाद, मुझे जवाब पता चला: sysinfo वापस लौटाएगा (अन्य चीजों के साथ) एक फ़ील्ड जो इंगित करता है कि कितनी प्रक्रियाएं हैं।

यह कहा गया है कि, यदि कोई मैकोज़/एक्स और/या विंडोज़ sysinfo() के बराबर विंडोज के बारे में जानता है, तो मुझे अभी भी इसमें रूचि है।


अपडेट: यहां अंततः कार्य समाप्त हुआ है।

#ifdef __linux__ 
# include <sys/sysinfo.h> 
#elif defined(__APPLE__) 
# include <sys/sysctl.h> 
#elif defined(WIN32) 
# include <Psapi.h> 
#endif 

int GetTotalNumProcesses() 
{ 
#if defined(__linux__) 
    struct sysinfo si; 
    return (sysinfo(&si) == 0) ? (int)si.procs : (int)-1; 
#elif defined(__APPLE__) 
    size_t length = 0; 
    static const int names[] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; 
    return (sysctl((int *)names, ((sizeof(names)/sizeof(names[0]))-1, NULL, &length, NULL, 0) == 0) ? (int)(length/sizeof(kinfo_proc)) : (int)-1; 
#elif defined(WIN32) 
    DWORD aProcesses[1024], cbNeeded; 
    return EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded) ? (cbNeeded/sizeof(DWORD)) : -1; 
#else 
    return -1; 
#endif 
} 
[चल प्रक्रियाओं सूची लिनक्स एपीआई?] की
+0

+1, यह वास्तव में मेरे सुझाव से बहुत आसान है। –

3

opendir("/proc") और प्रविष्टियों की संख्या गिनी (getsysinfo() एक Minix बात का अधिक प्रतीत होता है) वे निर्देशिका हैं और केवल अंक हैं।

संबंधित मुद्दे

 संबंधित मुद्दे