Por que não consigo usar o renice para aumentar o valor agradável de um processo?

24

De man renice :

Users other than the super-user may only alter the priority of processes they own, and can only monotonically increase their ''nice value'' (for security reasons) within the range 0 to PRIO_MAX (20) [...]

Então, posso renice meus próprios processos para cima (dar-lhes menor prioridade), mas nunca para baixo:

$ 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

Por que isso? Posso entender por que os usuários normais não podem definir valores bons abaixo de 0, mas por que, como posso diminuir a prioridade para 10, não posso aumentá-la novamente para 9? Qual "razão de segurança" existe para isso? Eu tenho o direito de lançar um processo com um bom valor de 9, então por que não posso renegá-lo para 9?

EDIT: eu deveria aprender a rolar para baixo. Acontece que isso é listado como um bug em 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.

Isso é ainda mais confuso. Se eles consideram esse comportamento como um bug, por que não mudá-lo? O comando renice apareceu no 4.0BSD, que eu acho que é de 1980. Isso deve ser muito fácil de consertar, por um lado, eles parecem ter escolhido deixá-lo e, por outro, eles o listam como um bug.

    
por terdon 12.03.2014 / 11:11

3 respostas

17

Desde o linux 2.6.12, isso depende do valor do limite RLIMIT_NICE ( ulimit -e ). O que pode levar valores de 0 a 40. Esse limite é mais o limite na prioridade do processo (quanto maior esse número, maior a prioridade que um usuário pode definir para um processo).

Você notará que o valor padrão é 20 no Ubuntu 10.04 e 0 no Debian jessie, por exemplo.

Um valor de n para esse limite significa que um processo sem o recurso CAP_NICE só pode aumentar uma prioridade de processo para até n , o que significa diminuir a tolerância a uma% de% código%. Portanto, para um valor de 0, isso significa que nenhum usuário não privilegiado pode diminuir a gentileza abaixo de 20, portanto, nenhum usuário não privilegiado pode diminuir a gentileza.

Com um valor de 20, os usuários sem privilégios podem diminuir o niceness de volta para 0.

Cabe ao administrador escolher se eles permitem que os usuários diminuam a prioridade do processo e em qual nível, definindo o limite máximo para isso.

Por que um administrador pode não querer que os usuários diminuam sua prioridade de processo, veja a resposta do Flup .

    
por 12.03.2014 / 12:40
19

É pelo que eu chamo de motivos de política . A ideia é que os usuários normais não podem substituir as ações de usuários privilegiados.

Digamos que você seja um usuário em algum servidor compartilhado enorme. Você está executando processos monstruosos que sobrecarregam a CPU em detrimento dos outros usuários. O sysadmin renice s alguns dos seus processos porque ele não gosta muito de você. O sistema operacional não lembra quem fez o renice , mas sabe que usuários normais não podem reverter a ação. Desta forma, o sysadmin tem controle sobre as prioridades de processo dos usuários normais.

    
por 12.03.2014 / 11:30
-1

Estranho? funciona para mim em

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

exemplo

$ 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ª edição

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

Config changes

/etc/security/limits.conf

@audio          -       rtprio          100
@audio          -       nice            -10

E eu sou membro do grupo de áudio, isso foi para reduzir a latência com xruns de jack / ardor e buffer durante a gravação.

renice

$ renice --version
renice from util-linux-ng 2.17.2
    
por 12.03.2014 / 12:35

Tags