사용자 네임스페이스에서 실시간 우선순위로 스레드를 시작하는 작은 프로그램이 있습니다. 하지만 실행하려고 할 때마다 "권한이 거부되었습니다"라는 오류가 발생합니다. 프로그램:
#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;
}
프로그램을 루트로 실행하면 예상되는 출력이 생성됩니다.
Setting rt prio Retval: 0, Errno: 0
일반 사용자로 실행하면 필요한 기능이 있습니다.
sudo setcap CAP_SYS_NICE+eip realtime
하지만 unshare -U를 사용하여 사용자 네임스페이스로 전환하면 항상 권한 거부 오류가 발생합니다. 상위 네임스페이스에 적절한 기능을 설정했는데도 마찬가지입니다. 사용자 네임스페이스에서 실시간 우선순위로 스레드를 실행할 수 있는 방법이 있습니까?