Prioridades de Processos: Como nice e renice Funcionam
O Que Você Vai Conquistar
- Explicar a relação entre o valor nice e a prioridade do kernel (PRI)
- Iniciar um comando com prioridade baixa usando
nice - Alterar a prioridade de um processo em execução com
renice - Verificar a prioridade com precisão usando
top/ps - Responder com raciocínio a pergunta frequente no exame "usuários comuns não podem elevar a prioridade"
Este é o núcleo do objetivo 103.6 do LPIC-1 "Modificar prioridades de execução de processos". É a técnica para executar trabalho pesado em segundo plano sem perturbar o trabalho interativo.
Decidindo o Valor nice
O valor nice é um inteiro de -20 (prioridade mais alta) a 19 (prioridade mais baixa). Quanto menor o valor, mais CPU o processo recebe.
| Valor nice | Prioridade | Uso típico |
|---|---|---|
-20 a -1 |
Alta (somente root) | Trabalho que precisa de resposta em tempo real |
0 |
Padrão (default) | Comandos normais |
1 a 19 |
Baixa | Trabalho pesado como backup, batch, build |
Se "o backup torna o trabalho interativo lento", inicie-o com prioridade baixa usando nice -n 19. Um usuário comum só pode alterar o valor nice na direção de aumentá-lo (número maior = prioridade menor). Este é um ponto frequente no exame.
Passo a Passo
Passo 1: Verificar o valor nice atual
ps -o pid,ni,comm -p $$ nice
PID NI COMMAND 2451 0 bash 0
A coluna NI é o valor nice. nice sem argumento mostra o valor nice do shell atual. O padrão é 0.
Passo 2: Iniciar um comando com prioridade baixa usando nice
nice -n 19 tar czf backup.tar.gz /var/www & ps -o pid,ni,comm -C tar
PID NI COMMAND 3120 19 tar
nice -n 19 cmd inicia um comando com valor nice 19 (prioridade mais baixa). O trabalho prossegue apenas quando a CPU está ociosa, minimizando o impacto no trabalho interativo.
Passo 3: Alterar um processo em execução com renice
renice -n 10 -p 3120 ps -o pid,ni,comm -p 3120
3120 (process ID) old priority 19, new priority 10 PID NI COMMAND 3120 10 tar
renice -n 10 -p PID altera o valor nice de um processo em execução. -u user altera todos os processos de um usuário e -g group altera por grupo.
Passo 4: Monitorar prioridade com top
top -o NI
PID USER PR NI VIRT RES %CPU COMMAND 3120 user 30 10 118000 4200 2.3 tar 2451 user 20 0 12000 3800 0.1 bash
No top, a coluna NI é o valor nice e PR é a prioridade interna do kernel, relacionados por PR = 20 + NI (para processos normais). Pressionar r dentro do top permite renice interativo.
Passo 5: Confirmar a restrição para usuários comuns
renice -n -5 -p 3120 sudo renice -n -5 -p 3120
renice: failed to set priority for 3120 (process ID): Permission denied 3120 (process ID) old priority 10, new priority -5
Um usuário comum não pode definir um valor nice negativo (prioridade alta) e recebe Permission denied. Elevar a prioridade requer privilégios de root (sudo).
Por Que Usuários Comuns Não Podem Elevar a Prioridade
Tornar o valor nice negativo permite que aquele processo tome CPU preferencialmente sobre os processos de outros usuários. Se qualquer um pudesse elevar a prioridade livremente, um usuário malicioso ou um programa com bug poderia monopolizar o sistema inteiro, destruindo a justiça em um ambiente multiusuário. Então o Linux adota um design de permissão assimétrico: "reduzir a prioridade (ceder) é permitido para todos, elevar a prioridade (tomar) é somente root".
A palavra nice vem de "ser gentil com outros processos cedendo CPU". Aumentar o valor a partir do padrão 0 significa "ceder mais gentilmente" = prioridade menor. Compreender essa direção previne confusão sobre o sinal do valor nice. Note que nice é apenas uma dica para o agendador; se a CPU está ociosa, mesmo um processo com valor nice alto prossegue.
Solução de Problemas
Sintoma: renice retorna Permission denied
Causa: Um usuário comum está tentando reduzir o valor nice (direção negativa), ou alterar o processo de outro usuário
Verificação:
ps -o pid,user,ni -p PID
Solução: Use sudo renice para elevar a prioridade. Alterar o processo de outro usuário também requer privilégios de root.
Sintoma: O trabalho não desacelera mesmo com nice -n 19
Causa: nice é uma dica relativa; sem processos competindo, ele pode usar CPU total
Verificação:
top -o %CPU
Solução: É comportamento normal que nice só faz efeito sob competição de CPU. Para reduzir a prioridade de I/O, use ionice separadamente.
Sintoma: Um build em segundo plano torna o trabalho interativo lento
Causa: O processo de build compete por CPU igualmente com o valor nice padrão 0
Verificação:
ps -o pid,ni,comm -C make
Solução: Reduza o processo em execução para a prioridade mais baixa com renice -n 19 -p PID. De agora em diante, inicie com nice -n 19 make.
Lista de Verificação de Conclusão
- [ ] Verificou o valor nice atual com
ps -o pid,ni,comm - [ ] Iniciou com prioridade baixa usando
nice -n 19 - [ ] Alterou um processo em execução com
renice -n -p PID - [ ] Monitorou a prioridade na coluna
NIdotop - [ ] Confirmou a restrição de que usuários comuns não podem elevar a prioridade
Resumo
| Cenário | Comando | Propósito |
|---|---|---|
| Ao iniciar | nice -n 19 cmd |
Iniciar trabalho pesado com prioridade baixa |
| Em execução | renice -n 10 -p PID |
Ajustar um processo em execução |
| Por usuário | renice -n 5 -u user |
Alterar todos os processos de uma vez |
| Verificar | ps -el / top |
Monitorar NI / PRI |
| Elevar prioridade | sudo renice -n -5 |
Somente root |
Prioridade de processos é a base do gerenciamento de recursos de CPU. Após cobrir a área de gerenciamento de processos do LPIC-1, combine com ambiente de shell e mecanismos de links para completar seu conhecimento operacional.