用户命名空间中的实时优先级

用户命名空间中的实时优先级

我有一个小程序在用户命名空间中启动一个具有实时优先级的线程。但每次我想启动它时,我都会收到错误“权限被拒绝”。该程序:

#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, &param);
   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 切换到用户命名空间时,我总是收到权限被拒绝的错误。即使我在父命名空间中设置了适当的功能。是否有某种方法可以在用户命名空间中运行具有实时优先级的线程?

相关内容