![系统范围的调度修改](https://linux22.com/image/204639/%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E7%9A%84%E8%B0%83%E5%BA%A6%E4%BF%AE%E6%94%B9.png)
有没有办法改变整个系统的进程调度策略?例如,我想将所有进程的默认 SCHED_OTHER 更改为 SCHED_RR 。该命令chrt
对进程进行操作。我想更改系统范围内的设置。对此有什么想法吗?
更新:
更具体地说,我想启动一些命令,例如tar
使用不同的策略,问题是在启动程序之前,我不知道进程ID。
答案1
chrt 不仅可以更改正在运行的进程的调度优先级(您实际上需要 pid),还可以按照特定的调度策略启动新进程:
chrt [options] priority command argument ... chrt [options] -p [priority] PID
描述
chrt sets or retrieves the real-time scheduling attributes of an existing PID, or runs command with the given attributes.
因此,如果您想从头开始直接启动运行 SCHED_RR rtprio 10 的 tar,只需
chrt -r 10 tar blahblahraroptions
正如评论中所写,如果让所有正在运行的进程在相同的优先级上运行相同的调度策略是没有意义的,那么就没有办法实现这一点。
但是,可以根据您所需的调度策略/优先级自动启动所有用户的进程,因为这是(默认情况下)由子进程继承的。
1/ fork 一个 bash 进程,调度 SCHED_FIFO / 优先级 10 :
$ chrt -f 10 bash
2/ 从现在开始启动的任何进程都将按照相同的方式进行安排,无需使用 chrt。
/proc/2074 $ ps -eHo pid,ppid,tid,class,rtprio,ni,pri,comm
...
4168 2074 4168 FF 10 - 50 bash
4192 4168 4192 FF 10 - 50 ps
...
谨慎使用,仅用于测试目的,当然要避免发射叉子炸弹并分配尽可能高的优先级!