为什么pthread_setschedparam()在opensuse 11.4上生成EPERM

时间:2011-11-13 11:49:01

标签: linux pthreads

我正在使用内核2.6.37.1-1.2在opensuse 11.4上编写一个带有c ++和NetBeans的应用程序 (以root身份登录)。此应用程序创建一个线程,并在运行时给出以下结果:

    sched_param param;
    param.__sched_priority = -1;
    policy = SCHED_FIFO;
    param.__sched_priority = 50;
    result = pthread_setschedparam(m_thread,policy,&param);

result = 1(EPERM (not permitted))

为什么?

1 个答案:

答案 0 :(得分:2)

呃...因为不允许这样做?检查以下设置:

  

非特权进程无法设置实时   优先级高于其RLIMIT_RTPRIO设置。你可以改变这个   在rtprio中添加“/etc/security/limits.conf”条目(设置为   在登录时应用,因此更改不会影响现有登录会话。)

     

权限由CAP_SYS_NICE功能决定。

这样的东西应该放在配置文件中:

domain       type    item     value
@group       soft    rtprio   100

给定组的软rtprio限制为100。 假设您的PAM配置使用pam_limits。

,这将有效

您可能还必须确定硬限制:

@group       hard    rtprio   100