ユーザーの名前空間でリアルタイムの優先順位でスレッドを起動する小さなプログラムがあります。しかし、実行しようとするたびに「権限が拒否されました」というエラーが発生します。プログラム:
#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を使用してユーザーの名前空間に切り替えると、常に許可拒否エラーが発生します。親ネームスペースに適切な機能を設定しても同じです。ユーザーの名前空間でリアルタイムの優先順位でスレッドを実行する方法はありますか?