我有一个小程序在用户命名空间中启动一个具有实时优先级的线程。但每次我想启动它时,我都会收到错误“权限被拒绝”。该程序:
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
#include <pthread.h>
#include <errno.h>
int main(int argc, char *argv[])
{
printf("Setting rt prio\n");
struct sched_param param;
param.sched_priority=20;
int retval = sched_setscheduler(0, SCHED_RR, ¶m);
printf("Retval: %d, Errno: %d\n", retval, errno);
return 0;
}
以 root 身份运行程序会产生预期的输出:
Setting rt prio Retval: 0, Errno: 0
以普通用户身份运行具有必要的功能:
sudo setcap CAP_SYS_NICE+eip realtime
但是当我使用 unshare -U 切换到用户命名空间时,我总是收到权限被拒绝的错误。即使我在父命名空间中设置了适当的功能。是否有某种方法可以在用户命名空间中运行具有实时优先级的线程?