【发布时间】:2014-12-29 18:43:44
【问题描述】:
为什么sched_setscheduler() 需要root 权限?
我正在编写一些受益于设置 SCHED_FIFO 的代码。但是如果我使用 sched_setscheduler() 我现在必须要求这个进程以 root 身份运行。为什么不允许sched_setscheduler()在没有root权限的情况下运行?
【问题讨论】:
标签: c linux linux-kernel root
为什么sched_setscheduler() 需要root 权限?
我正在编写一些受益于设置 SCHED_FIFO 的代码。但是如果我使用 sched_setscheduler() 我现在必须要求这个进程以 root 身份运行。为什么不允许sched_setscheduler()在没有root权限的情况下运行?
【问题讨论】:
标签: c linux linux-kernel root
大概是因为使用实时调度程序的进程可以完全接管一台机器,而不会将 CPU 分配给其他进程——这是普通用户不应该有的权力。
Linux 允许您进行比以 root 身份运行更精细的控制,但您可以使用以下命令在可执行文件上设置 CAP_SYS_NICE capability(以 root 用户身份完成一次):
setcap cap_sys_nice+ep ./your_program
这将允许您的可执行文件使用 sched_setscheduler,即使它不是以 root 用户身份运行。
【讨论】:
setcap 需要 root (至少在我的机器上。也许将 sudo 添加到您的命令中。
因为它允许您的进程更改其他进程获得多少 CPU,这可能会被滥用。
【讨论】: