2016-10-05 7 views
5

मैं जानना चाहता हूं कि वास्तव में उपयोगकर्ता इनपुट के लिए प्रतीक्षा की जाने वाली प्रक्रिया के साथ क्या होता है। आइए कहें, मेरे कोड में मैंने कंसोल से उपयोगकर्ता इनपुट पढ़ने के लिए scanf() को कॉल किया था। यह आंतरिक रूप से पढ़ा जाएगा() सिस्टम कॉल। लेकिन इस मामले में उपयोगकर्ता को कोई इनपुट देने तक पढ़ने के लिए कोई डेटा नहीं है। तो क्या हमारी प्रक्रिया तब तक सो रही है?उपयोगकर्ता इनपुट के लिए प्रतीक्षा की जाने वाली प्रक्रिया के साथ वास्तव में क्या होता है?

+5

आपकी प्रक्रिया * अवरुद्ध * होगी, जिसका अर्थ है: I/O की प्रतीक्षा। कर्नेल प्रक्रिया की स्थिति को याद करता है (एक पढ़ने() सिस्टम कॉल के अंदर) और आई/ओ उपलब्ध होने के बाद इसे चलाने की अनुमति देगा। – wildplasser

+0

तो क्या इसका मतलब यह है कि टीटीवाई ड्राइवर किसी भी तरह शेड्यूलर को सूचित करेगा कि डेटा उपलब्ध है और शेड्यूलर तैयार कतार में प्रक्रिया को स्थानांतरित करेगा? – techiek7

+2

टीटीवी ड्राइवर यहां प्रासंगिक नहीं है। कार्यक्रम को पाइप या सॉकेट से अपना इनपुट मिल सकता है, या जो भी दायरलेखक संदर्भ दे रहा है। आईआईआरसी लिनक्स चलाने योग्य प्रक्रियाओं और प्रतीक्षा प्रक्रियाओं के लिए अलग सूचियों (कतार) का उपयोग करता है। एक बार डेटा उपलब्ध नहीं होता है, तो इन कतारों के बीच प्रोसेस का रिकॉर्ड स्थानांतरित हो जाएगा। शेड्यूलर केवल * रननेबल * कतार से संबंधित है। – wildplasser

उत्तर

4

हाँ, यह सो रहा है (कम से कम ओएस एक्स में)।

संकलन और निम्नलिखित सी कार्यक्रम चलाने का प्रयास करें:

#include <stdio.h> 

int main() { 
    int x; 
    puts("Enter a number:"); 
    if (scanf("%d",&x)) { 
     printf("You entered %d\n",x); 
    } 
    else { 
     puts("That isn't a number"); 
    } 
    return 0; 
} 

कार्यक्रम कंसोल में चलाना शुरू करें, फिर एक और कंसोल खोलें और आदेश पंक्ति पर ps -v दर्ज करें।

PID STAT  TIME SL RE PAGEIN  VSZ RSS LIM  TSIZ %CPU %MEM COMMAND 
19544 S  0:00.01 0 0  0 2463084 1596  -  0 0.0 0.0 -bash 
19574 S  0:00.01 0 0  0 2454892 1568  -  0 0.0 0.0 -bash 
19582 S+  0:00.00 0 0  0 2434816 676  -  0 0.0 0.0 ./a 

यहाँ, ./a कार्यक्रम का नाम है: आप कुछ इस तरह देखना चाहिए। STAT कॉलम में इस प्रक्रिया के लिए प्रविष्टि S+ है, जिसका अर्थ है कि प्रक्रिया सो रही है (S) और अग्रभूमि (+) में है।

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

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