2011-10-01 21 views
7

मैं सी में यूनिक्स के 'अच्छा' कमांड के एक अलग स्वाद को लागू करने की कोशिश कर रहा हूं। मैंने अच्छी() सिस्टम कॉल और सेटप्रिरीटी() कॉल की परिभाषाएं देखी हैं। अच्छा() कॉल केवल प्रक्रिया की प्राथमिकता में वृद्धि/कमी करता है। यदि मैं किसी प्रक्रिया की प्राथमिकता को किसी विशेष मान पर सेट करना चाहता हूं, तो क्या मैं अच्छा() कॉल का उपयोग नहीं कर सकता? असल में, प्राथमिकता को कैसे संशोधित किया जाता है, इसके अलावा, क्या अच्छा() और setpriority() के बीच कोई अंतर है?यूनिक्स में अच्छा और सेटप्रिरीटी के बीच अंतर

उत्तर

8

यह ऐतिहासिक है। nice()setpriority() से बहुत पहले पेश किया गया था। पिछली संगतता के लिए, nice फ़ंक्शन को बनाए रखा गया था।

+0

तो सेटप्रिरीटी अच्छा होने की प्रगति है .. धन्यवाद, टैट ने मेरा संदेह साफ कर दिया .. मैं सोच रहा था कि क्या अच्छा और सेटप्रिरीटी द्वारा संदर्भित 'प्राथमिकता' अलग थी (लंगड़ा, मुझे पता है :)) तो मैं सेटप्रिओरिटी के साथ अच्छा कार्यान्वित करूंगा () अपने आप। –

+0

@AswinParthasarathy यह dup2 के इतिहास के समान है। दोनों मामलों में, लोगों को एहसास हुआ कि अधिक सामान्य (या अधिक विशिष्ट) व्यवहार की आवश्यकता थी, यही कारण है कि कुछ कार्यों में ओवरलैपिंग व्यवहार –

+0

@Aswin: वास्तव में अन्य प्राथमिकताओं हैं, जिन्हें 'sched_setscheduler() 'के माध्यम से सेट किया गया है। – ninjalj

8

nice अपनी प्राथमिकता (वर्तमान प्रक्रिया की विशिष्टता) सेट करता है। setpriority आपको अन्य प्रक्रियाओं (या समूह या उपयोगकर्ताओं को संसाधित करने) की विशिष्टता सेट करने देता है। इसे renice के रूप में सोचें।

आदमी 3p अच्छा

पूर्णांक अच्छा (पूर्णांक incr);

आदमी 3p setpriority

पूर्णांक setpriority (पूर्णांक जो, id_t जो, पूर्णांक मूल्य);

+0

हाँ, लेकिन मैं सेटप्रिरीटी के साथ पूरा कर सकता हूं, जैसा कि मैंने अच्छा किया, ठीक है? –

+1

हां, लेकिन अच्छा * केवल * वर्तमान प्रक्रिया को प्रभावित करता है, जहां सेटप्रिरीटी किसी भी प्रक्रिया को प्रभावित कर सकती है (संभावित रूप से)। यह अंतर है। –

+0

@ क्रिस इस सवाल पर ध्यान केंद्रित कर रहे हैं कि कोई व्यक्ति अच्छा उपयोग क्यों करेगा जब व्यवहार को दोहराने के लिए सेटप्रायोरिटी/गेटप्रिरीटी का उपयोग किया जा सकता है –

2

nice() वर्तमान वर्तमान मूल्य के सापेक्ष वर्तमान प्रक्रिया के अच्छे मूल्य को संशोधित करता है, इसलिए प्रक्रिया को इसके शुरुआती अच्छे मूल्य के बारे में जानने की आवश्यकता नहीं है, यह केवल परवाह करता है कि यह सिस्टम के लिए अच्छा होना चाहिए (उदाहरण: ए प्रक्रिया एक बच्चे को लॉन्च करती है जो कुछ पृष्ठभूमि प्रसंस्करण करता है, बच्चा खुद को अच्छा मानता है)।

setpriority() उपयोग केस उपयोगकर्ता स्पष्ट रूप से विशिष्ट प्रक्रियाओं के लिए पूर्ण अच्छे मूल्य निर्धारित करता है।

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

  • कोई संबंधित समस्या नहीं^_^