개요
리눅스 환경에서 프로세스의 스케줄링 정책과 실시간 우선순위를 직접 제어하는 것은 지연 시간에 민감한 작업의 성능을 극대화하는 핵심 기술입니다. 본 글에서는 util-linux 패키지의 핵심 도구인 chrt 명령어를 사용하여 실시간 스케줄러(FIFO, RR)의 개념을 이해하고 직접 프로세스에 적용해 봅니다. 우분투 환경에서 명령어 설치 확인부터 백그라운드 프로세스 우선순위 변경 및 모니터링까지 단계별 실습으로 정리했습니다.
chrt 지원 스케줄링 정책 및 우선순위 범위 확인
chrt 명령어 실습을 위해 필요한 util-linux 및 procps 패키지를 설치하고 업데이트합니다.

chrt 명령어는 프로세스의 실시간 스케줄링 속성과 우선순위를 확인하거나 변경하는 도구입니다.-m 옵션을 사용하면 현재 커널이 지원하는 스케줄링 정책과 유효한 우선순위 최소/최댓값 범위를 확인할 수 있습니다.
⚙️ [주요 옵션]
-m : 시스템에서 지원하는 스케줄링 정책과 우선순위 최소/최댓값 범위를 출력합니다.-p : 특정 프로세스 ID(PID)를 지정하여 스케줄링 정책 및 우선순위를 조회하거나 변경합니다.-f : 실시간 선입선출 스케줄링 정책(SCHED_FIFO)을 적용합니다.-r : 실시간 라운드 로빈 스케줄링 정책(SCHED_RR)을 적용합니다.-o : 일반 기본 시분할 스케줄링 정책(SCHED_OTHER)을 적용합니다.-b : 배치 작업용 스케줄링 정책(SCHED_BATCH)을 적용합니다.-i : 유휴 작업용 스케줄링 정책(SCHED_IDLE)을 적용합니다.-d : 마감 시간 기반 스케줄링 정책(SCHED_DEADLINE)을 적용합니다.

실행 중인 프로세스의 기본 스케줄링 정책 및 우선순위 조회
스케줄링 정책 및 우선순위 실습을 진행하기 위해 sleep 600 & 명령어로 600초 동안 대기하는 백그라운드 프로세스를 생성합니다.

직전에 실행한 백그라운드 프로세스의 PID를 이후 실습에서 편리하게 참조하기 위해 TARGET_PID=$! 명령어로 셸 변수에 저장합니다.

chrt -p 명령어를 사용하여 대상 프로세스의 현재 스케줄링 정책과 우선순위를 조회합니다.
조회 결과 기본값으로 표준 시분할 스케줄링 정책인 SCHED_OTHER가 적용되어 있으며, 우선순위 값은 0으로 설정된 것을 확인할 수 있습니다.

ps 명령어의 -o 옵션으로 프로세스의 스케줄링 클래스(CLS)와 실시간 우선순위(RTPRIO), 일반 우선순위(PRI)를 함께 확인합니다.
출력 결과에서 일반 시분할 정책(TS)이 적용되어 실시간 우선순위(RTPRIO)는 비어 있고(-), 기본 커널 우선순위인 19가 할당된 것을 확인할 수 있습니다.

실시간 스케줄링 정책(SCHED_FIFO 및 SCHED_RR)으로 변경
sudo chrt -f -p 50 $TARGET_PID 명령어를 실행하여 대상 프로세스의 스케줄링 정책을 실시간 선입선출 방식인 SCHED_FIFO로 변경하고 실시간 우선순위를 50으로 설정합니다.
실시간 스케줄링 정책 적용과 우선순위 설정은 시스템 자원 배분에 직접적인 영향을 미치므로 관리자 권한(sudo)이 필요합니다.

chrt -p 명령어를 실행하여 대상 프로세스의 스케줄링 정책과 우선순위가 정상적으로 변경되었는지 확인합니다.
출력 결과를 통해 프로세스의 정책이 SCHED_FIFO로 전환되었으며 실시간 우선순위 값이 50으로 올바르게 반영된 것을 확인할 수 있습니다.

sudo chrt -r -p 30 $TARGET_PID 명령어를 실행하여 대상 프로세스의 스케줄링 정책을 실시간 라운드 로빈 방식인 SCHED_RR로 전환하고 실시간 우선순위를 30으로 재설정합니다.SCHED_RR 정책은 동일한 우선순위를 가진 실시간 프로세스들 간에 할당된 실행 시간(Time Slice)을 바탕으로 CPU를 공평하게 번갈아 사용하도록 제어합니다.

ps 명령어의 -o 옵션으로 대상 프로세스의 스케줄링 클래스(CLS), 실시간 우선순위(RTPRIO), 커널 우선순위(PRI)를 조회하여 시스템 반영 상태를 검증합니다.
출력 결과에서 스케줄링 클래스가 RR로 표시되고 실시간 우선순위(RTPRIO)에 30, 커널 내부 우선순위(PRI)에 70이 정상적으로 부여된 것을 확인할 수 있습니다.

실시간 정책으로 신규 프로세스 실행 및 리소스 정리
신규 프로세스를 시작할 때부터 실시간 라운드 로빈 정책(SCHED_RR)과 우선순위 25를 적용하여 백그라운드로 실행하기 위해 sudo chrt -r 25 sleep 300 & 명령어를 실행합니다.chrt 명령어는 이미 실행 중인 프로세스의 정책을 변경하는 것뿐만 아니라, 새로운 프로그램을 구동하는 시점부터 원하는 실시간 스케줄링 속성을 즉시 부여하여 시작할 수 있습니다.

ps -eo pid,cls,rtprio,comm | grep '[s]leep' 명령어를 실행하여 현재 동작 중인 sleep 프로세스들의 스케줄링 클래스(CLS)와 실시간 우선순위(RTPRIO)를 조회합니다.
출력 결과를 통해 이전에 설정한 프로세스와 새로 실행한 프로세스 모두 실시간 라운드 로빈(RR) 정책이 적용되어 각각 지정된 우선순위(30, 25)로 정상 실행 중임을 확인할 수 있습니다.
![ps -eo pid,cls,rtprio,comm | grep ‘[s]leep’](/ubuntu/20261018_014711_104/captures/s04_c02_ps_-eo_pid_cls_rtprio_comm___grep___s_leep.png)
실습 과정에서 생성한 백그라운드 프로세스들을 종료하고 시스템 자원을 정리하기 위해 kill -9 $TARGET_PID && pkill -f 'sleep 300' 명령어를 실행합니다.
변수에 저장해 두었던 대상 프로세스와 새로 띄운 300초 대기 프로세스가 모두 강제 종료되어 실습 환경이 깔끔하게 복구됩니다.

지금까지 chrt 명령어를 활용해 리눅스 프로세스의 실시간 스케줄링 정책과 우선순위를 제어하는 방법을 간단하게 살펴보았습니다.
지연 시간에 민감한 핵심 서비스를 운영하거나 성능 최적화가 필요할 때 유용하게 활용해 보시기 바랍니다.