[shell script] nice : 프로세스 스케줄링 우선순위 설정 명령

HYEOB KIM·2022년 4월 27일
0

Shell

목록 보기
60/71

프로세스를 실행할 때 리눅스 커널은 각 프로세스에 CPU를 할당합니다.
이때 스케줄링 우선순위가 존재합니다.

우선순위는 -20 ~ +19의 범위로 정해지고, 숫자가 낮을 수록 우선순위가 높다는 의미입니다.

쉘은 기본적으로 모든 프로세스를 스케줄링 우선순위 0으로 실행합니다.

nice

스케줄링 우선순위를 설정할 수 있는 명령입니다.

nice -n <우선순위> <실행 명령>

-n 옵션은 붙이지 않아도 무방합니다.
-n 옵션을 쓰지 않고는 아래와 같이 쓸 수 있습니다.

nice -<우선순위>

하지만 위와 같은 방법은 음수를 표현시 대시(-)가 2개 연속으로 붙어 혼란을 줄 수 있기 때문에 -n 옵션을 붙여서 사용하시는 것을 추천합니다.

기본적으로 쉘은 우선순위가 높아지는 것을 막아놨습니다.
그래서 아래와 같이 명령을 실행하면 권한 문제(Permission denied)가 발생합니다.

$ nice -n -10 ./test1 > result1 &
[3] 589807
$ nice: cannot set niceness: Permission denied

[3]-  Done                    nice -n -10 ./test1 > result1

하지만 명령은 그대로 실행됩니다.

renice

이미 실행 중인 프로세스의 우선순위를 변경하고 싶다면 renice를 이용합니다.

renice -n <우선순위> -p <PID>
$ ./test1 &
[3] 589940

$ ps -p 589940 -o pid,ppid,ni,cmd
    PID    PPID  NI CMD
 589940  583315   0 /bin/bash ./test1

NI우선순위입니다.

$ renice -n 10 -p 589940
589940 (process ID) old priority 0, new priority 10

$ ps -p 589940 -o pid,ppid,ni,cmd
    PID    PPID  NI CMD
 589940  583315  10 /bin/bash ./test1

우선순위가 변경된 것을 확인할 수 있습니다.

nice, renice 명령 이용 시 유의사항

  • 소유권을 가지고 있는 프로세스에 대해서만 nice, renice 가능
  • 낮은 우선순위로만 nice, renice 가능
  • 루트 사용자는 어떤 프로세스에 어떤 우선순위로든 nice, renice 명령 가능
profile
Devops Engineer

0개의 댓글