Prioridades de Processos: Como nice e renice Funcionam

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 NI do top
  • [ ] 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.

Próximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 — Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos Relacionados do LPIC-1

Prática