Linux / Comando renice: alterar NI de um processo em execução
renice altera o valor nice de um processo que já está em execução. Depois de conferir o identificador do processo, o PID, e seu comando, você pode reduzir sua prioridade relativa de CPU aumentando esse valor.
O valor nice influencia o agendamento do tempo do processador, a CPU. Ele não reduz a memória usada nem encerra o programa. Para iniciar um novo comando com outro valor, use nice e seu ajuste relativo; renice atua em um processo que já existe.
Sintaxe e diferença entre valor e incremento
renice --priority valor -p PID...
Esta sintaxe usa renice do util-linux com a opção --priority, que define um valor absoluto. Por exemplo, definir 10 em um processo que tem NI 5 resulta em NI 10, se a operação for permitida; não soma 10 para chegar a 15. Confira type renice, renice --version, renice --help e man renice na instalação usada antes de aplicar os exemplos.
A opção curta -n merece atenção: no util-linux, ela usa um valor absoluto quando a variável de ambiente POSIXLY_CORRECT não está definida, mas passa a representar um incremento quando essa variável está definida. A forma --relative escolhe explicitamente o incremento. Para evitar depender desse contexto, os comandos de alteração abaixo usam --priority. Se a versão instalada não oferecer essa opção, confira seu manual em vez de substituir a sintaxe automaticamente.
Essa diferença está documentada tanto no manual do renice do util-linux quanto na página do renice no Debian testing. Outros sistemas e implementações podem seguir regras diferentes.
Conferir um PID antes e depois do ajuste
Os três exemplos curtos são modelos para Linux com ps do procps. Substitua 1234 pelo PID real de um processo seu que possa ser ajustado e faça as consultas na mesma sequência. Primeiro, confira o comando, o usuário mostrado e a coluna NI, que contém o valor nice:
ps -p 1234 -o pid,user,ni,cmd
Não prossiga se o processo não for o esperado, já tiver terminado ou você não tiver autorização para ajustá-lo. Uma listagem de ps ajuda a conferir o alvo, mas não bloqueia a identidade do PID: o processo pode terminar e o número pode ser reutilizado depois da consulta.
Com o alvo confirmado, a forma explícita para definir NI 10 é:
renice --priority 10 -p 1234
Esse comando define 10; não é a mesma operação que acrescentar 10 com nice -n. Também não garante que a aplicação ficará dez vezes mais lenta ou limitada a certa porcentagem de CPU. Confira a mensagem do comando e consulte o resultado:
ps -p 1234 -o pid,ni,cmd
Se o ajuste for permitido e o processo ainda existir, NI deve refletir o valor solicitado. Se houver erro de permissão, processo ausente ou opção não reconhecida, não considere a alteração concluída. O guia de ps e consulta de processos explica os campos e os limites da seleção.
Prática limitada a um processo de teste
O exemplo completo exige Bash, sleep, renice do util-linux com --priority e ps compatível com as opções do procps no Linux. Execute-o sem set -e. Ele cria apenas uma espera de oito segundos, guarda imediatamente seu PID em $!, verifica o valor inicial e altera somente esse filho. A espera termina naturalmente; a rotina EXIT também aguarda o filho caso uma verificação interrompa a sequência.
(
for renice_demo_tool in renice ps sleep; do
command -v "$renice_demo_tool" >/dev/null || exit 1
done
sleep 8 &
renice_demo_pid=$!
case "$renice_demo_pid" in ''|*[!0-9]*|0) exit 1 ;; esac
trap 'wait "$renice_demo_pid" 2>/dev/null' EXIT
sleep 0.2
ps -p "$renice_demo_pid" -o pid,user,ni,comm || exit 1
renice_demo_before=$(ps -p "$renice_demo_pid" -o ni=) || exit 1
renice_demo_before=${renice_demo_before//[[:space:]]/}
[[ "$renice_demo_before" =~ ^-?[0-9]+$ ]] || exit 1
if (( renice_demo_before > 10 )); then
printf '%s\n' 'NI maior que 10: teste interrompido sem ajuste.'
exit 1
fi
renice --priority 10 -p "$renice_demo_pid"
renice_demo_adjust_status=$?
ps -p "$renice_demo_pid" -o pid,ni,comm
renice_demo_ps_status=$?
wait "$renice_demo_pid"
renice_demo_wait_status=$?
trap - EXIT
printf 'renice=%s ps=%s wait=%s\n' "$renice_demo_adjust_status" "$renice_demo_ps_status" "$renice_demo_wait_status"
)
Quando o valor inicial for 0 e a alteração funcionar, a primeira consulta deve mostrar NI 0 e a segunda, NI 10. Um valor inicial diferente de 0 muda a primeira linha; se já for maior que 10, o bloco interrompe a prática sem tentar aumentar a prioridade. O formato da mensagem produzida por renice varia conforme a versão.
Com as consultas compatíveis e o filho terminando normalmente, o resumo esperado é renice=0 ps=0 wait=0. São resultados esperados para a prática Linux, não uma medição de desempenho. Se o processo terminar antes da consulta, ela pode não mostrar uma linha; analise também as mensagens de erro e os estados separados.
No ambiente disponível, Bash 5.3.9 do Git para Windows, renice não foi encontrado: as consultas de versão e ajuda retornaram 127. A execução do bloco parou na checagem inicial com retorno 1, antes de criar o filho. Sua sintaxe foi aceita pelo Bash, mas nenhuma alteração de NI, seleção de usuário ou grupo, ou política de um kernel Linux foi executada e confirmada ali.
A prática usa um PID positivo guardado em uma variável e espera pelo próprio filho. Isso evita depender de um número fixo de exemplo ou aplicar -u e -g durante o teste. A consulta anterior ao ajuste continua sem ser uma operação atômica com a alteração; use um processo controlado que permaneça ativo durante a sequência.
Opções e alcance dos alvos
| Opção | Significado no util-linux documentado |
|---|---|
--priority valor |
Define um valor nice absoluto. |
--relative incremento |
Soma um incremento ao valor nice existente. |
-n valor |
Usa valor absoluto ou incremento conforme POSIXLY_CORRECT; deve ser o primeiro argumento quando utilizado. |
-p PID |
Interpreta os identificadores seguintes como PIDs. |
-u usuário |
Seleciona por nome de usuário ou UID e pode alcançar vários processos. |
-g PGID |
Seleciona por identificador de grupo de processos e pode alcançar todos os processos desse grupo. |
PGID é um identificador de grupo de processos; não é o grupo de usuários usado nas permissões de arquivos. Em um comando com vários identificadores, confira o alcance de cada seletor e cada mensagem de resultado. Não trate uma operação sobre usuário ou grupo como se fosse equivalente a um único PID confirmado.
Permissões e possibilidade de desfazer
Um usuário sem privilégios normalmente só pode ajustar processos próprios e aumentar o valor nice, reduzindo a prioridade relativa. Voltar de 10 para 0 significa aumentar a prioridade e pode ser recusado, mesmo que tenha sido você quem fez a primeira alteração. Um limite de recurso apropriado, RLIMIT_NICE, pode permitir determinados ajustes; privilégios como a capacidade CAP_SYS_NICE também afetam essa autorização.
O manual das interfaces getpriority e setpriority do Linux detalha as permissões. Se precisar restaurar um valor, registre antes o valor original e confirme a autorização para voltar a ele. A prática com sleep evita depender dessa reversão: o processo é temporário e termina por conta própria.
No Linux, o valor nice é um atributo por thread, ou linha de execução. Em um programa com várias threads, não suponha que ajustar um PID prove que todas receberam o mesmo valor. Para um diagnóstico desse tipo, confira as threads e a forma como o programa foi criado; o exemplo com sleep trata um caso simples.
O que uma mudança de NI não resolve
Renice não define uma porcentagem máxima de CPU nem diminui a memória alocada. Seu efeito depende dos trabalhos concorrentes, da política de agendamento e dos grupos de controle de recursos, os cgroups. O manual de agendamento do Linux explica essas condições, incluindo o agrupamento automático de sessões.
Se o programa estiver esperando disco, rede ou memória, mudar NI pode não resolver o gargalo. Observe o comportamento depois do ajuste e confirme a necessidade da mudança; um NI diferente, sozinho, não comprova que o tempo total do trabalho melhorou.
Pergunta frequente
Qual é a diferença entre nice e renice?
Nice inicia um novo comando com um ajuste no valor herdado. Renice altera um processo que já existe e, no util-linux, permite escolher explicitamente um valor absoluto com --priority ou um incremento com --relative. Confira a implementação e o alvo antes de aplicar a mudança.




