नींद की अवस्था में जाने और उसे जगाने की प्रक्रिया का कारण कैसे जानें?


19

जब मैं 'टॉप' करता हूं, तो मैं 'एस' राज्य में अपनी पर्ल स्क्रिप्ट प्रक्रिया देखता हूं। क्या यह जानने का कोई तरीका है, कि इस गड़बड़ी की प्रक्रिया नींद की स्थिति में क्या है और इसे जगाने के क्या तरीके हैं? पर्ल स्क्रिप्ट में लाइनों पर अधिक जानकारी देने के लिए डिबग करने का कोई भी तरीका 'एस' स्थिति में जाता है।

जवाबों:


22

Sराज्य में एक प्रक्रिया आमतौर पर एक ब्लॉकिंग सिस्टम कॉल में होती है, जैसे फ़ाइल या नेटवर्क पर पढ़ना या लिखना, या किसी अन्य प्रोग्राम के समाप्त होने की प्रतीक्षा करना।

आप यह strace -p <pid>पता लगाने के लिए उपयोग कर सकते हैं कि वर्तमान में कौन सा सिस्टम कॉल हो रहा है। यह जैसे आउटपुट का उत्पादन करेगा

लिखना (1, "फोब्बर" ..., 4096

जिसका अर्थ है कि प्रक्रिया 4096 बाइट्स लिखने की कोशिश कर रही है, जो कि "फोब्बर" से शुरू होकर stdout (fd # 1) तक है लेकिन जो भी इसे पुनर्निर्देशित किया गया है वह व्यस्त है और आउटपुट बफर भरा हुआ है।


5

जब वे किसी चीज की प्रतीक्षा कर रहे होते हैं, तो प्रक्रियाएं सो जाती हैं, आमतौर पर I / O।

आपकी प्रक्रिया उस Sस्थिति में होगी जब वह पढ़ रहा है और संभवतः लिख रहा है कि अवरुद्ध हो रहा है। सेमाफोर या अन्य सिंक्रोनाइज़ेशन प्राइमेटिव पर प्रतीक्षा करते समय भी हो सकता है।

आप इसे "जागो" नहीं कर सकते - यह तभी आगे बढ़ेगा जब इसके लिए उपलब्ध डेटा / संसाधन की प्रतीक्षा की जा रही है।

यह सब सामान्य और अपेक्षित है, और आमतौर पर समस्या नहीं है। आमतौर पर, यह "प्रोग्राम" कमांड लाइन पर बिना किसी फ़ाइल के चलता है:

while (<>) { print; }

अपना अधिकांश समय नींद की अवस्था में बिताएंगे, जो अच्छा है - आप सीपीयू को बर्बाद नहीं करना चाहते, जबकि यह उपयोगकर्ता इनपुट की प्रतीक्षा कर रहा है।

अगर आपको लगता है कि यह एक समस्या है, तो अपने आई / ओ करने के तरीके को बदलने की कोशिश करें (अंतर्निहित डिवाइस के ब्लॉक आकार के अच्छे गुणकों में, बड़ी मात्रा में पढ़ना, मेमोरी मैपेड I / O, आदि करना)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.