Estou executando o Arch Linux em um Raspberry Pi 2.
Eu tenho um programa de espaço de usuário que usa a biblioteca wiringPi
de Gordon e, em particular, os piHiPri()
function que tenta definir a prioridade mais alta para o processo atual (usando sched_setscheduler
e SCHED_RR
mode).
Esta função precisa de privilégios de superusuário.
O usuário root é o padrão ao instalar o Arch Linux, então criei um usuário chamado builder
que adicionei a sudoers
graças a visudo
.
Meu problema é:
quando executo o programa com o usuário root
, a função sched_setscheduler
retorna "Operação não permitida" (obtendo a partir de errno
).
Se eu o executar enquanto estiver sendo builder
, receberei uma "permissão negada".
No entanto, se eu executar com sudo myProgram
sendo builder
, está tudo bem e posso ver que a prioridade mudou com o comando top
.
Eu pensei que o usuário root
pode não ter o UID 0, então eu verifiquei com id -u root
, mas isso retorna 0.
ls -l myProgramm
dá -rwxr-xr-x 1 root root
. Eu também tentei definir SUID com chmod +s myProgramm
sem sucesso.
Alguma ideia de como tornar meu programa executável por root?
EDITAR:
Como Gilles aconselhou, executei ulimit -r
e ele retornou 0 em todos os casos ( builder
e root
).
Alterei uma linha em /etc/security/limits.conf
de: * - rtprio 0
Para: * - rtprio 99
Isso afetou a saída de ulimit -r
como esperado: ela retorna agora 99.
Tentei novamente executar meu programa com root
, mas ainda tenho o mesmo erro Operation not permitted
e agora ele não funciona mais com sudo
(mesmo Operation not permitted
como acima )... estranho !
Durante a investigação, reverti para as configurações antigas de /etc/security/limits.conf
.