#Bash 的 chrt 命令
chrt [OPTION] -p [PRIORITY] PID chrt [OPTION] PRIORITY [COMMAND] [ARGS ...]
功能
查看或设置进程的调度策略和优先级;或以指定的进程优先级执行命令。
类型
可执行文件(/usr/bin/chrt),属于 util-linux。
参数
OPTION选项:-a,--all-tasks- 设置检索进程下的所有任务(线程)-m,--max- 查看优先级的取值范围-p,--pid- 查看或设置的进程ID-v,--verbose- 显示状态信息--help- 显示帮助--version- 显示版本- 策略选项:
-o,--other- 将调度策略设为SCHED_OTHER(分时调度);这是 Linux 的默认调度策略-f,--fifo- 将调度策略设为SCHED_FIFO(先进先出调度);无时间片,可能饿死所有任务-r,--rr- 将调度策略设为SCHED_RR(轮流调度);有时间片,可能饿死低优先级任务;不指定策略时默认使用此选项-b,--batch- 将调度策略设为SCHED_BATCH(批处理调度)-i,--idle- 将调度策略设为SCHED_IDLE(闲时调度);用于低优先级任务-d,--deadline- 将调度策略设为SCHED_DEADLINE(截止时间调度);在截止时间前完成的硬实时调度策略
- 调度选项:
-T,--sched-runtime nanoseconds- 指定SCHED_DEADLINE策略的运行时参数-P,--sched-period nanoseconds- 指定SCHED_DEADLINE策略的周期参数-D,--sched-deadline nanoseconds- 指定SCHED_DEADLINE策略的截止时间参数-R,--reset-on-fork- 使用SCHED_RESET_ON_FORK或SCHED_FLAG_RESET_ON_FORK标志
PRIORITY- 优先级;数值越大,优先级越高COMMAND- 要执行的命令ARGS- 命令的参数列表
#示例
查看优先级的取值范围
$ chrt -m
SCHED_OTHER min/max priority : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
SCHED_IDLE min/max priority : 0/0
SCHED_DEADLINE min/max priority : 0/0
- 可以看到只有
SCHED_FIFO和SCHED_RR支持优先级
查看和设置进程调度策略和优先级
$ chrt -p $$ # 查看当前 bash 进程的调度策略和优先级
pid 944375's current scheduling policy: SCHED_OTHER
pid 944375's current scheduling priority: 0
$ sudo chrt -r -p 20 $$ # 将策略设为 SCHED_RR,优先级设为 20
$ chrt -p $$ # 再次查看当前 bash 进程的调度策略和优先级
pid 944375's current scheduling policy: SCHED_RR
pid 944375's current scheduling priority: 20
以指定的进程调度策略和优先级执行命令
$ chrt -i 0 tail -f /var/log/syslog # 以 SCHED_IDLE 策略执行 tail -f /var/log/syslog
- 虽然
SCHED_IDLE不支持优先级,但不能省略优先级参数,必须设置为0
#推荐阅读
#手册
CHRT(1) User Commands CHRT(1) NAME chrt - manipulate the real-time attributes of a process SYNOPSIS chrt [options] priority command argument ... chrt [options] -p [priority] PID DESCRIPTION chrt sets or retrieves the real-time scheduling attributes of an existing PID, or runs command with the given attributes. POLICIES -o, --other Set scheduling policy to SCHED_OTHER (time-sharing scheduling). This is the default Linux scheduling policy. -f, --fifo Set scheduling policy to SCHED_FIFO (first in-first out). -r, --rr Set scheduling policy to SCHED_RR (round-robin scheduling). When no policy is defined, the SCHED_RR is used as the default. -b, --batch Set scheduling policy to SCHED_BATCH (scheduling batch processes). Linux-specific, supported since 2.6.16. The priority argument has to be set to zero. -i, --idle Set scheduling policy to SCHED_IDLE (scheduling very low priority jobs). Linux-specific, supported since 2.6.23. The priority argument has to be set to zero. -d, --deadline Set scheduling policy to SCHED_DEADLINE (sporadic task model deadline scheduling). Linux-specific, supported since 3.14. The priority argument has to be set to zero. See also --sched-runtime, --sched-deadline and --sched-period. The relation between the options required by the kernel is runtime ⇐ deadline ⇐ period. chrt copies period to deadline if --sched-deadline is not specified and deadline to runtime if --sched-runtime is not specified. It means that at least --sched-period has to be specified. See sched(7) for more details. SCHEDULING OPTIONS -T, --sched-runtime nanoseconds Specifies runtime parameter for SCHED_DEADLINE policy (Linux-specific). -P, --sched-period nanoseconds Specifies period parameter for SCHED_DEADLINE policy (Linux-specific). Note that the kernel’s lower limit is 100 milliseconds. -D, --sched-deadline nanoseconds Specifies deadline parameter for SCHED_DEADLINE policy (Linux-specific). -R, --reset-on-fork Use SCHED_RESET_ON_FORK or SCHED_FLAG_RESET_ON_FORK flag. Linux-specific, supported since 2.6.31. Each thread has a reset-on-fork scheduling flag. When this flag is set, children created by fork(2) do not inherit privileged scheduling policies. After the reset-on-fork flag has been enabled, it can be reset only if the thread has the CAP_SYS_NICE capability. This flag is disabled in child processes created by fork(2). More precisely, if the reset-on-fork flag is set, the following rules apply for subsequently created children: • If the calling thread has a scheduling policy of SCHED_FIFO or SCHED_RR, the policy is reset to SCHED_OTHER in child processes. • If the calling process has a negative nice value, the nice value is reset to zero in child processes. OPTIONS -a, --all-tasks Set or retrieve the scheduling attributes of all the tasks (threads) for a given PID. -m, --max Show minimum and maximum valid priorities, then exit. -p, --pid Operate on an existing PID and do not launch a new task. -v, --verbose Show status information. -h, --help Display help text and exit. -V, --version Print version and exit. EXAMPLES The default behavior is to run a new command: chrt priority command [arguments] You can also retrieve the real-time attributes of an existing task: chrt -p PID Or set them: chrt -r -p priority PID This, for example, sets real-time scheduling to priority 30 for the process PID with the SCHED_RR (round-robin) class: chrt -r -p 30 PID Reset priorities to default for a process: chrt -o -p 0 PID See sched(7) for a detailed discussion of the different scheduler classes and how they interact. PERMISSIONS A user must possess CAP_SYS_NICE to change the scheduling attributes of a process. Any user can retrieve the scheduling information. NOTES Only SCHED_FIFO, SCHED_OTHER and SCHED_RR are part of POSIX 1003.1b Process Scheduling. The other scheduling attributes may be ignored on some systems. Linux' default scheduling policy is SCHED_OTHER. AUTHORS Robert Love <[email protected]>, Karel Zak <[email protected]> SEE ALSO nice(1), renice(1), taskset(1), sched(7) See sched_setscheduler(2) for a description of the Linux scheduling scheme. REPORTING BUGS For bug reports, use the issue tracker at https://github.com/util-linux/util-linux/issues. AVAILABILITY The chrt command is part of the util-linux package which can be downloaded from Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>. util-linux 2.39.3 2023-11-21 CHRT(1)