我正在opensuse 11.4上用c++和NetBeans编写一个应用程序,内核是2.6.37.1-1.2
(以根用户身份登录)。这个应用程序创建一个线程,当run给出这个结果时:
sched_param param;
param.__sched_priority = -1;
policy = SCHED_FIFO;
param.__sched_priority = 50;
result = pthread_setschedparam(m_thread,policy,¶m);
结果=
1(EPERM (not permitted))
为什么?
最佳答案
呃。。。因为这是不允许的?检查以下设置:
非特权进程无法设置实时
优先级高于其RLIMIT_RTPRIO设置。你可以改变这个
在rtprio
中输入“/etc/security/limits.conf
”(设置为
应用于登录,所以更改不会影响现有登录会话。
特权由CAP_SYS_NICE
功能决定。
配置文件中应该包含以下内容:
domain type item value
@group soft rtprio 100
给定组的软rtprio限制为100。
假设您的PAM配置使用PAM_限制,这将起作用。
您可能还必须确定硬限制:
@group hard rtprio 100
关于linux - 为什么pthread_setschedparam()在opensuse 11.4上产生EPERM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8111302/