Neden bir işlemin iyi değerini artırmak için renice'yi kullanamıyorum?


25

Kimden man renice:

Süper kullanıcı dışındaki kullanıcılar yalnızca sahip oldukları işlemlerin önceliğini değiştirebilir ve yalnızca 0 ` PRIO_MAX (20) [...] aralığında kendi` `güzel değerlerini '(güvenlik nedeniyle) artırabilirler.

Bu yüzden renicekendi süreçlerimi yukarı doğru yapabilirim (onlara daha düşük öncelik veririm) ama asla aşağı doğru değil:

$ 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

Bu neden? Neden normal kullanıcıların niçin iyi değerlerin 0'dan daha düşük olamayacağını anlayabiliyorum, ancak neden önceliği 10'a düşürdüğümden tekrar 9'a yükseltemiyorum? Bunun için ne "güvenlik nedeni" var? 9 değerinde bir işlem başlatmak için hakkım var, peki neden 9 olarak değiştiremiyorum?


EDIT: Aşağı kaydırmayı öğrenmeliyim. Bunun bir hata olarak listelendiğini belirtir 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.

Bu daha da kafa karıştırıcı. Bu davranışı bir hata olarak görüyorlarsa neden değiştirmiyorsunuz? reniceKomut ben 1980 den bu çok kolay olmalı bunu bırakmak seçmiş görünüyor, bir yandan çok düzeltmek ve diğer taraftan da bir hata olarak listeleyebilmemiz olduğunu düşünüyorum ilk kez 4.0 BSD'de.


Çünkü 0'dan büyük olan bazı öncelikler bir sistem işlemi veya bir güvenlik modülü tarafından zorlanabilir ve kullanıcı tarafından asla düşürülmemesi gerekir (ve belirli bir kullanıcı işleminin sabit değer 0'dan başka bir azlığını belirlemek için yeterince kontrol cezası yoktur) ? Emin değilim bir cevap değil ama bir tahmin.
lgeorget

Yanıtlar:


19

Linux 2.6.12’den bu yana, bu RLIMIT_NICE limitinin ( ulimit -e) değerine bağlıdır . Bu, 0'dan 40'a kadar olan değerleri alabilir. Bu sınır, işlemin önceliği üzerindeki sınırdır (bu sayı ne kadar büyükse, kullanıcının işlem için belirleyeceği öncelik o kadar yüksek olur).

Örneğin Debian jessie'de ubuntu 10.04'te varsayılan değer 20 ve 0'da 0 olduğunu göreceksiniz.

nBu sınırın değeri , CAP_NICE özelliğine sahip olmayan bir işlemin yalnızca işlem önceliğini artırabileceğin anlamına gelir 20 - n; Bu nedenle, 0 değeri için, bu, ayrıcalıklı olmayan hiçbir kullanıcının, 20'nin altındaki doğruluğu azaltabileceği anlamına gelmez, bu nedenle ayrıcalıklı olmayan hiçbir kullanıcı, doğruluğu düşüremez.

20 değerinde, ayrıcalıklı olmayan kullanıcılar, nezaketleri 0'a düşürebilir.

Kullanıcıların işlem önceliğini düşürmesine izin verip vermeyeceğini ve bunun için sabit sınırı ayarlayarak hangi seviyeye geleceğini seçmek yöneticiye kalmıştır.

Bir yöneticinin neden kullanıcıların işlem önceliğini düşürmesini istemeyeceği konusunda Flup'ın cevabına bakınız .


1
Ah! Bu yüzden yapılandırılabilir! Tamam, bu daha mantıklı, teşekkürler.
terdon

"0'dan 40'a kadar olan değerler. [...] Örneğin, Debian jessie'de ubuntu 10.04'te varsayılan değer 20'nin, Debian jessie'de ise 0 olduğunu fark edeceksiniz." -> İlginç, sert / yumuşak ulimitler benim için debian jessie'de gerçekten 0. 20'ye kadar yükseltebilirim ama bunun ötesinde "bash: ulimit: Çizelgeleme önceliği: sınırı değiştiremiyorum: Geçersiz değişken" alıyorum, negatif değerler de kabul edilmiyor.
thomanski

20

Politika sebepleri dediğim için . Buradaki fikir, normal kullanıcıların, ayrıcalıklı kullanıcıların eylemlerini geçersiz kılamayacağıdır.

Diyelim ki muazzam bir paylaşılan sunucuda kullanıcısınız. Diğer kullanıcıların zararına karşı canavarca işlemciye yönelik işlemler yürütüyorsunuz. Sysadmin renicebazı işlemleriniz için çünkü sizden pek hoşlanmıyor. İşletim sistemi kimin yaptığını hatırlamıyor renice, ancak normal kullanıcıların işlemi geri alamayacağını biliyor. Bu şekilde, sysadmin normal kullanıcıların işlem öncelikleri üzerinde kontrol sahibi olur.


1
Bunu anlayabiliyorum ama hala garip görünüyor. Aslında, sadece bir hata olarak listelendiğini bile fark ettim man renice.
terdon

3
Böceğin amacı, 'Süper kullanıcılar olmayanlar, ilk etapta öncelikleri azaltanlar olsalar bile , kendi süreçlerinin zamanlama önceliklerini artıramazlar ' olduğunu düşünüyorum. yani, bu uygulamanın bir yan etkisi, reniceayrıcalıklı bir kullanıcı dışında bir kazanın geri döndürülememesidir.
Flup

7
Çünkü sistem önceliği kimin ayarladığını hatırlamıyor. İdeal olarak, eğer iyi seviyeyi yükselttiyseniz ve düşürmek istiyorsanız, buna izin verilebilir ... ancak sistem tam olarak bir paket yasağı uygular; renicebu rootyaptı.
Flup

1
@IwillnotexistIdonotexist, birçok kullanıcılı sistemleri düşünmektedir. Sysadmin, proseslerinizin önceliğini 5'e yükseltmek ve benimkilerimi 10'a düşürmek isteyebilir. Bu hala normal kullanıcılar arasındadır ancak değiştiremez ve hak ettiğiniz CPU süresini çalamaz. Yine de, Flup'un açıkladığı gibi fikir. Bununla birlikte, StephaneChazelas'ın açıkladığı gibi , bu yapılandırılabilirdir, bu yüzden tercih ettiklerini seçmek sysadmin'e bağlıdır.
terdon

1
“Neden?” Cevabının basit bir olasılıkla “muhtemel olması nedeniyle“ kimse kodu düzeltmek için kod yazmaya ihtiyaç duymuyordu. ” bellek kullanımı ve güncellemek için çalışma, ancak modern makinelerde, ihmal edilebilir, sadece “kullanıcının sysadmin'i geçersiz kılamaz” politikasını korumak isteyen siteler için kodu yazmak için motivasyon eksikliği bırakıyor
alanc

-1

Garip mi? benim için çalışıyor

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

örnek

$ 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

2. düzenleme

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

Yapılandırma değişiklikleri

/etc/security/limits.conf

@audio          -       rtprio          100
@audio          -       nice            -10

Ve ben ses grubunun bir üyesiyim, bu kayıt sırasında jack / ardor ve buffer xruns ile gecikmeyi azaltmaktı.

iyisin

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

Hangi dağıtımdasın? AIX 6.2'de değil
Kiwy

Çıktısını gönderilmesi için lütfen cat /etc/lsb*ve renice --versionde.
terdon

renice --version renice from util-linux-ng 2.17.2ama yine de
AIX’de
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.