Почему pthread_setschedparam () создает EPERM в opensuse 11.4 - PullRequest
0 голосов
/ 13 ноября 2011

Я пишу приложение на c ++ и NetBeans в opensuse 11.4 с ядром 2.6.37.1-1.2 (залогинен как root). Это приложение создает поток и при запуске дает такой результат:

    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))

Почему?

1 Ответ

2 голосов
/ 13 ноября 2011

эмм ... потому что это не разрешено?Проверьте следующие настройки:

Непривилегированный процесс не может установить приоритет в реальном времени выше, чем его настройка 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...