किसी प्रक्रिया का अच्छा मूल्य बढ़ाने के लिए मैं रेनाइस का उपयोग क्यों नहीं कर सकता?


25

से man renice:

सुपर-उपयोगकर्ता के अलावा अन्य उपयोगकर्ता केवल अपनी स्वयं की प्रक्रियाओं की प्राथमिकता को बदल सकते हैं , और केवल 0 से PRIO_MAX (20) [...] तक सीमा के भीतर ही अपना `अच्छा मूल्य '(सुरक्षा कारणों से) बढ़ा सकते हैं।

तो, मैं reniceअपनी खुद की प्रक्रियाओं को ऊपर की ओर कर सकता हूं (उन्हें कम प्राथमिकता दें) लेकिन कभी भी नीचे की ओर न हो:

$ renice 10 22316
22316 (process ID) old priority 0, new priority 10
$ renice 9 22316
renice: failed to set priority for 22316 (process ID): Permission denied

ऐसा क्यों है? मैं समझ सकता हूं कि सामान्य उपयोगकर्ता 0 से कम अच्छा मान क्यों सेट नहीं कर सकते, लेकिन जब से मैं 10 की प्राथमिकता को कम कर सकता हूं, क्या मैं इसे फिर से 9 तक नहीं बढ़ा सकता हूं? इसके लिए क्या "सुरक्षा कारण" है? मुझे 9 के अच्छे मूल्य के साथ एक प्रक्रिया शुरू करने का अधिकार है, तो मैं इसे 9 पर क्यों नहीं बदल सकता?


संपादित करें: मुझे नीचे स्क्रॉल करना सीखना चाहिए। यह एक बग के रूप में सूचीबद्ध है man renice:

BUGS
     Non super-users can not increase scheduling priorities of their own
     processes, even if they were the ones that decreased the priorities 
     in the first place.

यह और भी भ्रामक है। यदि वे इस व्यवहार को बग मानते हैं, तो इसे बदल क्यों नहीं सकते? reniceआदेश 4.0BSD जो मुझे लगता है कि 1980 से यह बहुत आसान होना चाहिए एक ओर वे इसे छोड़ने के लिए चुना है लगते हैं पर इतना तय करने के लिए और दूसरी ओर वे एक बग के रूप में यह सूची है में दिखाई दिया।


क्योंकि 0 से अधिक कुछ प्राथमिकताओं को एक सिस्टम प्रक्रिया या एक सुरक्षा मॉड्यूल द्वारा लागू किया जा सकता है और इसे उपयोगकर्ता द्वारा कभी भी कम नहीं किया जाना चाहिए (और निश्चित मान 0 के अलावा किसी दिए गए उपयोगकर्ता प्रक्रिया की न्यूनतम सुंदरता को परिभाषित करने के लिए पर्याप्त नियंत्रण नहीं है) ? उत्तर नहीं, क्योंकि मुझे यकीन नहीं है लेकिन एक अनुमान है।
लैर्जेट

जवाबों:


19

लिनक्स 2.6.12 के बाद से, यह RLIMIT_NICE सीमा ( ulimit -e) के मूल्य पर निर्भर करता है । जो 0 से 40 तक मान ले सकता है। यह सीमा प्रक्रिया की प्राथमिकता पर सीमा अधिक है (यह संख्या जितनी अधिक होगी, उतनी ही अधिक प्राथमिकता होगी जो उपयोगकर्ता किसी प्रक्रिया के लिए निर्धारित कर सकता है)।

आपने देखा कि डिफ़ॉल्ट मान 20 ubuntu 10.04 पर है और 0 उदाहरण के लिए डेबियन जेसी में।

का मान nउस सीमा का मतलब है कि CAP_NICE क्षमता के बिना एक प्रक्रिया केवल कर सकते हैं के लिए वृद्धि करने के लिए अप करने के लिए एक प्रक्रिया प्राथमिकता nहै, जो साधन की सुंदरता को सुंदरता नीचे कमी 20 - n। तो 0 के मान के लिए, इसका मतलब है कि कोई भी गैर-विशेषाधिकार प्राप्त उपयोगकर्ता 20 से नीचे की शून्यता को कम नहीं कर सकता है, इसलिए कोई भी गैर-विशेषाधिकार प्राप्त उपयोगकर्ता शून्य को कम नहीं कर सकता है।

20 के मान के साथ, गैर-विशेषाधिकार प्राप्त उपयोगकर्ता शून्य से 0 तक घट सकते हैं।

यह चुनने के लिए प्रशासक पर निर्भर है कि वे उपयोगकर्ताओं को अपनी प्रक्रिया प्राथमिकता को कम करने की अनुमति देते हैं, और किस स्तर तक इसके लिए कठिन सीमा निर्धारित करके।

के रूप में क्यों एक प्रशासक उपयोगकर्ताओं को अपनी प्रक्रिया प्राथमिकता को कम करने के लिए नहीं कर सकता है, Flup का जवाब देखें


1
आह! तो यह विन्यास योग्य है! ठीक है, यह अधिक समझ में आता है, धन्यवाद।
terdon

"मान 0 से 40 तक। [...] आप देखेंगे कि डिफॉल्ट मान 20 ubuntu 10.04 पर है और 0 उदाहरण के लिए डेबियन जेसी में।" -> दिलचस्प, मेरे लिए कठिन / नरम ulimits वास्तव में डेबियन जेसी पर 0 हैं। मैं 20 तक बढ़ा सकता हूं, लेकिन इससे परे मुझे "बैश: अलिमित: शेड्यूलिंग प्राथमिकता: सीमा संशोधित नहीं कर सकता: अमान्य तर्क", नकारात्मक मान भी स्वीकार नहीं किए जाते हैं।
thomanski

20

यह मैं नीतिगत कारणों से कहूंगा । यह विचार है कि सामान्य उपयोगकर्ता विशेषाधिकार प्राप्त उपयोगकर्ताओं के कार्यों को ओवरराइड नहीं कर सकते हैं।

मान लीजिए कि आप कुछ साझा किए गए सर्वर पर एक उपयोगकर्ता हैं। आप राक्षसी CPU-hogging प्रक्रिया को अन्य उपयोगकर्ताओं के लिए बंद कर रहे हैं। Sysadmin reniceने आपकी कुछ प्रक्रियाएँ पूरी की हैं क्योंकि वह आपको बहुत पसंद नहीं करता है। ओएस को याद नहीं है कि किसने क्या किया renice, लेकिन यह पता है कि सामान्य उपयोगकर्ता कार्रवाई को उलट नहीं सकते हैं। इस तरह, sysadmin का सामान्य उपयोगकर्ताओं की प्रक्रिया प्राथमिकताओं पर नियंत्रण होता है।


1
मैं समझ सकता हूं लेकिन यह अभी भी अजीब लगता है। वास्तव में, मुझे अभी पता चला है कि यह एक बग के रूप में भी सूचीबद्ध है man renice
terdon

3
मुझे लगता है कि बग की बात यह है कि 'गैर-सुपर-उपयोगकर्ता अपनी प्रक्रियाओं की समयबद्धता को नहीं बढ़ा सकते हैं, भले ही वे पहले स्थान पर प्राथमिकताओं को कम करने वाले हों ।' यानी यह इस प्रवर्तन का एक साइड-इफेक्ट है कि reniceएक विशेषाधिकार प्राप्त उपयोगकर्ता को छोड़कर एक आकस्मिक नहीं हो सकता है।
फ्लॉप

7
क्योंकि सिस्टम को यह याद नहीं है कि प्राथमिकता किसने तय की है। आदर्श रूप से, यदि आपने अच्छा स्तर उठाया है और फिर इसे कम करना चाहते हैं, तो इसकी अनुमति दी जाएगी ... लेकिन सिस्टम ठीक से शराबबंदी लागू करता है, क्योंकि यह रिकॉर्ड नहीं रखता है कि किसने क्या लिया, ताकि आप इसे पूर्ववत न कर सकें reniceकि rootकिया था।
फ्लॉप

1
कई उपयोगकर्ताओं के साथ @IwillnotexistIdonotexist सिस्टम के बारे में सोचते हैं। Sysadmin आपकी प्रक्रियाओं की प्राथमिकता को 5 तक बढ़ा सकता है और उन लोगों को मेरा 10 से कम कर सकता है। यह अभी भी सामान्य उपयोगकर्ताओं की सीमा के भीतर है, लेकिन मैं इसे बदलने और सीपीयू समय को चोरी करने में सक्षम नहीं हो पाऊंगा, जिसके आप हकदार हैं। वैसे भी यह विचार है जैसा कि फ्लॉप ने समझाया था। हालाँकि, जैसा कि स्टीफनचेज़लस ने समझाया , यह विन्यास योग्य है, इसलिए यह सिसडमिन पर निर्भर है कि वे क्या पसंद करते हैं।
terdon

1
"क्यों?" का उत्तर बस सबसे अधिक होने की संभावना है "क्योंकि किसी को इसे ठीक करने के लिए कोड लिखने के लिए पर्याप्त आवश्यकता नहीं थी।" जब यूनिक्स मूल रूप से लिखा गया था, तो एक प्रक्रिया की प्राथमिकता निर्धारित करने वाले ट्रैकिंग ट्रैकिंग के संदर्भ में महंगा हो सकता था। स्मृति के उपयोग और काम इसे अद्यतन करने के लिए, लेकिन आधुनिक मशीनों पर, कि नगण्य है, बस साइटों कि की मूल नीति रखना चाहते हैं के लिए इस ट्रैक करने के लिए कोड लिखने के लिए प्रेरणा की कमी छोड़ने "उपयोगकर्ता सिस्टम प्रशासक ओवरराइड नहीं कर सकते।"
alanc

-1

अजीब ? यह मेरे लिए काम करता है

Linux clafujiu 2.6.32-57-generic #119-Ubuntu \
 SMP Wed Feb 19 01:04:55 UTC 2014 i686 GNU/Linux

उदाहरण

$ renice 8 --pid 21122
21122: old priority 9, new priority 8
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122   8
21146   0
21155   0
21209   0
christian@clafujiu:~/tmp$ renice 15 --pid 21122
21122: old priority 8, new priority 15
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122  15
21146   0
21155   0
21211   0
christian@clafujiu:~/tmp$ renice 10 --pid 21122
21122: old priority 15, new priority 10
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122  10
21146   0
21155   0
21213   0

दूसरा संपादन

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"

कॉन्फ़िगर परिवर्तन

/etc/security/limits.conf

@audio          -       rtprio          100
@audio          -       nice            -10

और मैं ऑडियो समूह का सदस्य हूं, यह रिकॉर्डिंग करते समय जैक / आर्दोर और बफर xruns के साथ विलंबता को कम करना था।

अच्छा पुनः

$ renice --version
renice from util-linux-ng 2.17.2

आप किस डिस्टरो पर हैं? यह AIX 6.2
किवी

कृपया cat /etc/lsb*और renice --versionसाथ ही का आउटपुट पोस्ट करें ।
terdon

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