我正在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,&param);

结果=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/

10-09 13:01