我有一个程序,它使用如下代码生成一个实时线程:
schparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
getrlimit(RLIMIT_RTPRIO , &rlim);
rlim.rlim_cur = schparam.sched_priority;
setrlimit(RLIMIT_RTPRIO , &rlim);
result = pthread_setschedparam(pthread_self(),SCHED_FIFO, &schparam);
if(result != 0 )
printf("failed to set priority\n");
我的默认系统限制不允许 RT 调度线程,所以我需要调用 setrlimit 来提高这个值。当我登录到 root shell 并手动启动程序时,上面的代码可以正常工作。
但是,当我让 systemd 在启动时自动启动程序时,计划设置失败并出现权限错误。根据返回值和进程内对 getrlimit 的后续调用判断,setrlimit 调用似乎有效。但是 pthread_setschedparam 调用似乎没有意识到限制已经增加。
当我手动启动程序时,这一切都很好。我在这里想念什么?