यदि कोई प्रक्रिया भूखा हो रही है, तो उस प्रक्रिया के लिए स्वयं निगरानी उस उत्पादक नहीं होगी। लेकिन, अगर आप यह प्रक्रिया को नोटिस करना चाहते हैं तो यह थोड़ी देर में नहीं चला है, यह समय-समय पर times
पर कॉल कर सकता है और अनुसूचित उपयोगकर्ता समय में सापेक्ष अंतर के साथ व्यतीत समय में सापेक्ष अंतर की तुलना कर सकता है (आप tms_utime
और tms_cutime
फ़ील्ड यदि आप उत्पादक समय के रूप में बच्चों के लिए प्रतीक्षा करना चाहते हैं, और आप tms_stime
और tms_cstime
फ़ील्ड्स में योग करेंगे यदि आप उत्पादक समय के लिए आपकी तरफ से कर्नेल समय बिताते हैं)। थ्रेड टाइम्स के लिए, मुझे पता है कि एकमात्र तरीका /proc
फाइल सिस्टम से परामर्श करना है।
एक उच्च प्राथमिकता बाहरी प्रक्रिया या उच्च प्राथमिकता धागा प्रक्रिया के लिए उपयुक्त /proc/<pid>/stat
प्रविष्टियों (और /proc/<pid>/task/<tid>/stat
धागे के लिए) पढ़ने के द्वारा बाहरी रूप से प्रक्रियाओं (और धागे) की निगरानी कर सकता है। उपयोगकर्ता के समय stat
फ़ाइल के 14 वें और 16 वें क्षेत्रों में पाए जाते हैं। सिस्टम के समय 15 वें और 17 वें क्षेत्रों में पाए जाते हैं। (फ़ील्ड की स्थिति मेरे लिनक्स 2.6 कर्नेल के लिए सटीक है।)
दो बार बिंदुओं के बीच, आप पारित होने वाले विलुप्त समय की मात्रा निर्धारित करते हैं (एक मॉनीटर प्रक्रिया या धागा आम तौर पर नियमित अंतराल पर जागृत होता है)। फिर उन समय बिंदुओं में संचयी प्रसंस्करण के समय के बीच का अंतर दर्शाता है कि उस समय ब्याज के धागे को कितना समय चलाना था। समय बीतने के समय प्रसंस्करण का अनुपात समय टुकड़ा का प्रतिनिधित्व करेगा।
एक जानकारी के अंतिम बिट: लिनक्स पर, मैं /proc/<pid>/task/
निर्देशिका में सही task
की जांच के लिए वर्तमान धागे की tid
प्राप्त करने के लिए निम्नलिखित का उपयोग करें:
tid = syscall(__NR_gettid);
मैं यह कर, क्योंकि मैं नहीं कर सका gettid
सिस्टम कॉल वास्तव में मेरे सिस्टम पर किसी भी पुस्तकालय द्वारा निर्यात किया गया है, भले ही इसे दस्तावेज किया गया हो। लेकिन, यह आपके लिए उपलब्ध हो सकता है।