2016-11-02 5 views
7

मैंने एक सी प्रोग्राम लिखा है जिसे अपना स्वयं का सीपीयू और मेमोरी उपयोग प्राप्त करने की आवश्यकता है। इसलिए मैं कुछ इस तरह लिखा है:शीर्ष कमांड 0% CPU उपयोग देता है जब मैं प्रक्रिया के भीतर से अपनी प्रक्रिया के CPU उपयोग की जांच करता हूं

 system("prs_pid=`ps | grep prs-m1 | awk '{print $1}'` \n top -n1 | grep -m1 $prs_pid | \ 
        awk '{print \"prs_cpu:\" $7 \"\\nprs_mem:\" $6}' >> /stats"); 

मेरा आवेदन नाम पीआरएस है और मैं एक पी एस करते हैं और मेरी प्रक्रिया के पीआईडी ​​और फिर टॉप चलने से CPU उपयोग करना चाहते हैं। कार्यक्रम रिपोर्ट करता है कि यह 2% मेमोरी और 0% सीपीयू का उपयोग कर रहा है। लेकिन, cmd पर मैन्युअल रूप से एक ही कमांड चलाने से एक ही यादगार उपयोग होता है लेकिन एक मान्य गैर-शून्य CPU जो मैं शीर्ष पर चलकर सत्यापित कर सकता हूं। जो मुझे समझ में नहीं आता है, सिस्टम के अंदर से प्रयास किए जाने पर सीपीयू उपयोग हमेशा 0% क्यों होता है?

+0

यदि आप लिनक्स पर हैं, तो बस '/ proc' से पढ़ें: http://stackoverflow.com/q/16726779/8446 –

उत्तर

8

जब आप अपना system कमांड चला रहे हैं, तो वर्तमान प्रक्रिया निलंबित कर दी गई है (सुनिश्चित नहीं है कि यह उचित शब्द है, लेकिन किसी भी दर पर नहीं चल रहा है), जो आदेश समाप्त होने के लिए प्रतीक्षा कर रहा है।

हालांकि इसे निलंबित कर दिया गया है, इसका CPU उपयोग 0% है, जिसकी अपेक्षा की जाती है।

सही जानकारी प्राप्त करने के लिए, आपको अपने system कमांड को एक अलग थ्रेड या प्रक्रिया में चलाने की ज़रूरत है, इसलिए आपका प्रोग्राम चल रहा है।

+0

ओह मुझे लगता है कि आप सही हैं, प्रक्रिया स्थिति कहती है एस जब मैंने पूरी लाइन मुद्रित की सिस्टम के भीतर से शीर्ष कमांड में। धन्यवाद! –

+0

बहुत अच्छे प्रश्न के लिए धन्यवाद। अब http://stackoverflow.com/help/someone-answers –

+0

पढ़ें मैंने सिस्टम के बजाय popen() का उपयोग किया और अब यह काम करता है! बहुत बहुत धन्यवाद। जवाब पर जगह थी! –

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