프로세스의 가치를 높이기 위해 renice를 사용할 수없는 이유는 무엇입니까?


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명령은 1980 년대부터 4.0BSD에 등장한 것으로 나타났습니다.이 방법은 수정하기가 매우 쉬워야합니다. 한 손으로는 그대로두고 다른 손에는 버그로 표시합니다.


0보다 높은 일부 우선 순위는 시스템 프로세스 또는 보안 모듈에 의해 시행 될 수 있으며 사용자가 절대 감소해서는 안됩니다 (고정 된 값 0 이외의 특정 사용자 프로세스의 최소 수준을 정의 할 수있는 제어가 없습니다) ? 확실하지 않은 답변이 아니라 추측입니다.
lgeorget

답변:


19

Linux 2.6.12부터는 RLIMIT_NICE 제한 값 ( ulimit -e) 에 따라 다릅니다 . 0에서 40 사이의 값을 사용할 수 있습니다.이 제한은 프로세스 우선 순위 의 한계 보다 더 큽니다 (이 숫자가 클수록 사용자가 프로세스에 설정할 수있는 우선 순위가 높음).

우분투 10.04에서 기본값은 20이고 Debian jessie에서는 0입니다.

n이 한계 값은 CAP_NICE 기능 없는 프로세스는 프로세스 우선 순위를 최대 까지만 증가시킬n있음을 의미합니다. 즉, niceness를 niceness로 줄입니다 20 - n. 따라서 값이 0 인 경우 권한이없는 사용자가 니스를 20 미만으로 낮출 수 없으므로 권한이없는 사용자는 니스를 낮출 수 없습니다.

값이 20이면 권한이없는 사용자가 니스를 다시 0으로 줄일 수 있습니다.

사용자가 프로세스 우선 순위를 낮출 수 있도록 허용할지 여부와 하드 제한을 설정하여 수준을 결정하는 것은 관리자의 책임입니다.

관리자가 사용자가 프로세스 우선 순위를 낮추기를 원하지 않는 이유에 대해서는 Flup의 답변을 참조하십시오 .


1
아! 따라서 구성 할 수 있습니다! 알겠습니다. 감사합니다.
terdon

"0에서 40까지의 값. [...] 우분투 10.04에서 기본값은 20이고 Debian jessie에서는 0입니다." -> 흥미롭고 하드 / 소프트 ulimits는 debian jessie에서 실제로 0입니다. 최대 20 개까지 올릴 수 있지만 "bash : ulimit : 스케줄링 우선 순위 : 제한을 수정할 수 없습니다 : 유효하지 않은 인수"를 얻습니다. 음수 값도 허용되지 않습니다.
thomanski 2016 년

20

내가 정책 이유 라고 부르는 것 입니다. 일반 사용자는 권한있는 사용자의 작업을 무시할 수 없습니다.

거대한 공유 서버의 사용자라고 가정 해 봅시다. 다른 사용자에게 해를 끼치기 위해 엄청난 CPU 호깅 프로세스를 실행하고 있습니다. sysadmin renice은 사용자를 매우 좋아하지 않기 때문에 일부 프로세스를 처리합니다. OS는 누가했는지 기억하지 않지만 renice일반 사용자는 작업을 되돌릴 수 없다는 것을 알고 있습니다. 이러한 방식으로 sysadmin은 일반 사용자의 프로세스 우선 순위를 제어합니다.


1
이해할 수는 있지만 여전히 이상해 보입니다. 사실, 나는 그것이 심지어 버그로 나열되어 있음을 깨달았습니다 man renice.
terdon

3
버그의 핵심은 '비 수퍼 유저는 우선 순위 를 낮추는 프로세스 일지라도 자신의 프로세스의 스케줄링 우선 순위를 증가시킬 수 없다'고 생각합니다 . 즉 renice, 권한이있는 사용자가 아닌 한 우발적 으로 되돌릴 수없는 것은 이 시행의 부작용 입니다.
Flup

7
시스템은 누가 우선 순위를 설정했는지 기억하지 못하기 때문입니다. 이상적으로는, 좋은 수준을 올렸다가 낮추고 싶을 때는 허용되지만 ... 시스템은 누가 무엇을 기뻐했는지에 대한 기록을 보관하지 않기 때문에 담요 금지를 정확하게 적용하므로 실행 취소 할 수 없습니다. reniceroot했다.
Flup

1
존재하지 않는 사용자가 많은 시스템을 생각하십시오. sysadmin은 프로세스의 우선 순위를 5로 올리고 내 프로세스를 10으로 낮추고 싶을 수 있습니다. 여전히 일반 사용자 범위 내에 있지만 변경할 수는 없으며 CPU 시간을 훔칠 수는 없습니다. 그것은 Flup이 설명했던 어쨌든 아이디어입니다. 그러나 StephaneChazelas가 설명했듯이 이것은 구성 가능하므로 원하는 것을 선택하는 것은 sysadmin의 몫입니다.
terdon

1
"왜?"에 대한 대답은 "아무도 코드를 작성하기 위해 코드를 작성하는 데 필요한 사람이 없기 때문에"일 가능성이 높습니다. 메모리 사용 및 업데이트 작업을 수행하지만 최신 시스템에서는 무시할 수 있습니다. "사용자가 sysadmin을 재정의 할 수 없습니다"라는 원래 정책을 유지하려는 사이트에 대한 코드를 작성하는 동기 부여가 거의 없습니다.
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

2 차 편집

$ 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

그리고 나는 오디오 그룹의 일원입니다. 이것은 녹음 할 때 잭 / 하드 및 버퍼 xrun의 대기 시간을 줄이는 것입니다.

리 니스

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

어떤 배포판에 있습니까? 이 AIX 6.2에 있지 않습니다
Kiwy

cat /etc/lsb*그리고 출력도 게시하십시오 renice --version.
terdon

renice --version renice from util-linux-ng 2.17.2그러나 여전히 AIX에서는 불가능합니다
Kiwy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.