Eu tenho um aplicativo para o qual gostaria de usar um agendador FIFO. Meu código parece da seguinte forma:
int maxPriority = sched_get_priority_max(SCHED_FIFO);
// Max is the highest priority
sched_param desiredParam;
desiredParam.__sched_priority = maxPriority;
errno = 0;
int retValue = sched_setscheduler(0, SCHED_FIFO | SCHED_RESET_ON_FORK, &desiredParam);
Antes de executar o aplicativo, eu executo o seguinte:
sudo setcap cap_sys_nice+ep my_application
O mesmo código funciona em um computador, mas ele falha em outros três (o valor de retorno é -1 e o errno é definido como 1 - EPERM). Acontece que esses três computadores têm uma pasta pessoal criptografada. Se o executável for movido para fora do diretório inicial, o código não falhará e o agendador poderá ser alterado.
Para ter certeza de que não é um problema relacionado à versão do kernel, tentei atualizar o kernel em uma das máquinas onde o código falhava. No entanto, isso não ajudou.
No momento, a saída de uname -a
é
Linux my_host 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Ambas as máquinas têm o arquivo /etc/security/limits.conf
completamente comentado.
Existe uma maneira de executar o executável também a partir da pasta pessoal?
Tags c++ scheduling priority