Prioridades de Processos: Como nice e renice Funcionam
O Que Voce Vai Conquistar
- Explicar a relacao 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 execucao com
renice - Verificar a prioridade com precisao usando
top/ps - Responder com raciocinio a pergunta frequente no exame "usuarios comuns nao podem elevar a prioridade"
Este e o nucleo do objetivo 103.6 do LPIC-1 "Modificar prioridades de execucao de processos". E a tecnica para executar trabalho pesado em segundo plano sem perturbar o trabalho interativo.
Decidindo o Valor nice
O valor nice e 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 tipico |
|---|---|---|
-20 a -1 |
Alta (somente root) | Trabalho que precisa de resposta em tempo real |
0 |
Padrao (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 usuario comum so pode alterar o valor nice na direcao de aumenta-lo (numero maior = prioridade menor). Este e 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 e o valor nice. nice sem argumento mostra o valor nice do shell atual. O padrao e 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 esta ociosa, minimizando o impacto no trabalho interativo.
Passo 3: Alterar um processo em execucao 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 execucao. -u user altera todos os processos de um usuario 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 e o valor nice e PR e 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 restricao para usuarios 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 usuario comum nao pode definir um valor nice negativo (prioridade alta) e recebe Permission denied. Elevar a prioridade requer privilegios de root (sudo).
Por Que Usuarios Comuns Nao Podem Elevar a Prioridade
Tornar o valor nice negativo permite que aquele processo tome CPU preferencialmente sobre os processos de outros usuarios. Se qualquer um pudesse elevar a prioridade livremente, um usuario malicioso ou um programa com bug poderia monopolizar o sistema inteiro, destruindo a justica em um ambiente multiusuario. Entao o Linux adota um design de permissao assimetrico: "reduzir a prioridade (ceder) e permitido para todos, elevar a prioridade (tomar) e somente root".
A palavra nice vem de "ser gentil com outros processos cedendo CPU". Aumentar o valor a partir do padrao 0 significa "ceder mais gentilmente" = prioridade menor. Compreender essa direcao previne confusao sobre o sinal do valor nice. Note que nice e apenas uma dica para o agendador; se a CPU esta ociosa, mesmo um processo com valor nice alto prossegue.
Solucao de Problemas
Sintoma: renice retorna Permission denied
Causa: Um usuario comum esta tentando reduzir o valor nice (direcao negativa), ou alterar o processo de outro usuario
Verificacao:
ps -o pid,user,ni -p PID
Solucao: Use sudo renice para elevar a prioridade. Alterar o processo de outro usuario tambem requer privilegios de root.
Sintoma: O trabalho nao desacelera mesmo com nice -n 19
Causa: nice e uma dica relativa; sem processos competindo, ele pode usar CPU total
Verificacao:
top -o %CPU
Solucao: E comportamento normal que nice so faz efeito sob competicao 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 padrao 0
Verificacao:
ps -o pid,ni,comm -C make
Solucao: Reduza o processo em execucao para a prioridade mais baixa com renice -n 19 -p PID. De agora em diante, inicie com nice -n 19 make.
Lista de Verificacao de Conclusao
- [ ] Verificou o valor nice atual com
ps -o pid,ni,comm - [ ] Iniciou com prioridade baixa usando
nice -n 19 - [ ] Alterou um processo em execucao com
renice -n -p PID - [ ] Monitorou a prioridade na coluna
NIdotop - [ ] Confirmou a restricao de que usuarios comuns nao podem elevar a prioridade
Resumo
| Cenario | Comando | Proposito |
|---|---|---|
| Ao iniciar | nice -n 19 cmd |
Iniciar trabalho pesado com prioridade baixa |
| Em execucao | renice -n 10 -p PID |
Ajustar um processo em execucao |
| Por usuario | 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 e a base do gerenciamento de recursos de CPU. Apos cobrir a area de gerenciamento de processos do LPIC-1, combine com ambiente de shell e mecanismos de links para completar seu conhecimento operacional.