Linux / Comando nice: ajustar a prioridade relativa de um novo processo
nice inicia um comando com um ajuste no valor nice, que influencia a divisão do tempo do processador, a CPU. Um ajuste positivo aumenta esse valor e normalmente reduz a prioridade relativa do novo trabalho quando há disputa por CPU.
No Linux, a faixa usual vai de -20, mais favorável ao processo, a 19, menos favorável. Nice atua no comando que vai iniciar; para um processo já em execução, use renice, explicado no guia de renice em inglês.
Sintaxe: ajuste relativo, não valor absoluto
nice -n ajuste comando [argumentos...]
Na implementação GNU, -n soma o ajuste inteiro ao valor nice herdado pelo novo comando. Assim, um comando iniciado com o ajuste -n 10 terá valor 10 quando o ponto de partida for 0; se o valor herdado for 5, o resultado esperado é 15. Os limites da faixa também se aplicam: não se obtém um valor Linux maior que 19 por somar ajustes.
Confira type nice, nice --version e man nice no ambiente usado. Um shell pode oferecer sua própria versão, com diferenças de sintaxe. No GNU, executar nice sem um comando imprime o valor atual; isso não aumenta a prioridade nem aplica o ajuste padrão ao shell.
Calcular um hash com prioridade relativa menor
Os exemplos precisam de nice e sha256sum. Em um diretório de teste novo, prepare um arquivo pequeno chamado large.log com (set -C; printf 'linha de teste\n' > large.log). O sub-shell com set -C evita sobrescrever um arquivo comum que já exista e mantém essa configuração limitada à preparação. Confira o resultado da criação antes de continuar; o nome large.log não exige um arquivo grande para a prática.
Com o arquivo criado no diretório atual, execute:
nice -n 10 sha256sum large.log
O ajuste é +10 em relação ao valor herdado. Sha256sum lê o arquivo e apresenta seu hash SHA-256, uma soma de verificação do conteúdo, seguido pelo nome. O ajuste de agendamento não deve alterar a soma de verificação dos mesmos bytes; também não significa que a leitura do disco ficará limitada ou que o cálculo terminará em um prazo fixo.
Na versão GNU, omitir -n usa o incremento padrão de 10:
nice sha256sum large.log
Execute as duas formas sobre o mesmo arquivo, sem modificá-lo entre as consultas. A soma deve ser a mesma. No teste disponível com nice 8.32 do GNU coreutils no Git para Windows, ambas retornaram 0 e produziram a mesma soma para o arquivo de teste. Isso verificou a execução e o resultado do cálculo, não o desempenho do escalonador Linux.
Consultar NI de um processo existente
No Linux com ps do procps, a coluna NI mostra o valor nice. Esta consulta é um modelo: substitua 1234 pelo PID real do processo que quer examinar. Não é um número de trabalho como %1.
ps -p 1234 -o pid,ni,cmd
Confira o PID, NI e a linha de comando na mesma linha. Uma lista vazia pode significar que o processo já terminou; um erro de opção pode indicar outra implementação de ps. O guia de ps e seleção de processos explica o contexto dessas consultas. Uma consulta com ps apenas observa o processo; não muda seu valor nice.
Verificar um novo processo sem gerar carga intensa
A prática completa abaixo usa Bash, nice, sleep e ps com as opções do procps no Linux. Execute o bloco inteiro na mesma sessão. Ele cria uma espera curta, guarda imediatamente seu PID em $!, consulta NI e aguarda o próprio filho terminar. Os parênteses limitam as variáveis e a sequência a um sub-shell; nenhum processo existente é reniceado ou sinalizado.
(
for nice_demo_tool in nice sleep ps; do
command -v "$nice_demo_tool" >/dev/null || exit 1
done
printf 'nice atual: '
nice
nice -n 10 sleep 5 &
nice_demo_pid=$!
case "$nice_demo_pid" in ''|*[!0-9]*|0) exit 1 ;; esac
sleep 0.2
ps -o ni,comm -p "$nice_demo_pid"
nice_demo_ps_status=$?
wait "$nice_demo_pid"
nice_demo_wait_status=$?
printf 'ps=%s wait=%s\n' "$nice_demo_ps_status" "$nice_demo_wait_status"
)
Se nice atual for 0 e o ajuste funcionar, a consulta Linux deve mostrar NI 10 para sleep. A parte principal da saída esperada é a seguinte; o espaçamento pode variar:
NI COMMAND
10 sleep
$! identifica o processo iniciado em segundo plano mais recentemente naquele shell. Guardá-lo imediatamente evita perdê-lo ao iniciar outro comando assíncrono. O programa sleep aguarda sem criar uma carga contínua de CPU; esta prática confere o valor, não mede a divisão de CPU sob concorrência.
Com ps compatível e término normal do filho, o resumo esperado no Linux é ps=0 wait=0. Se a espera terminar antes da consulta, a linha pode não aparecer. Leia também as mensagens de erro: o retorno de wait descreve o filho aguardado, não comprova que a consulta ps funcionou.
Na execução com Bash 5.3.9 e nice 8.32 do Git para Windows, o valor inicial impresso foi 0, mas o ps do Cygwin rejeitou -o. O resumo real foi ps=1 wait=0, sem uma linha NI obtida por ps. Portanto, essa execução não confirmou a coluna NI nem o agendamento de um kernel Linux nativo.
Nesse mesmo ambiente, nice -n 10 nice e nice nice imprimiram 10, enquanto nice nice -n 3 nice imprimiu 13. As invocações aninhadas observaram o ajuste relativo dentro dos novos comandos. Não foram testados ajustes negativos, renice de processos existentes nem mudanças de prioridade global.
Opções e forma sem comando
| Forma | Função no GNU nice |
|---|---|
-n valor |
Soma um ajuste inteiro ao valor nice herdado pelo novo comando. |
--adjustment=valor |
Forma longa da opção de ajuste. |
nice, sem comando |
Imprime o valor nice atual, sem iniciar outro programa. |
A página de manual do comando GNU nice descreve a sintaxe e os estados de saída: 125 para falha do próprio nice, 126 quando o comando é encontrado mas não pode ser executado, 127 quando não é encontrado e, nos demais casos com execução, o estado do comando chamado.
Permissões e limites do ajuste
Reduzir o valor nice aumenta a prioridade relativa e pode exigir privilégios ou um limite de recurso que permita essa operação. No Linux, CAP_SYS_NICE é a capacidade relacionada a esse controle; RLIMIT_NICE é um limite de recurso que pode permitir determinados ajustes a um processo sem esse privilégio. Isso depende da configuração do sistema, como explica o manual da interface nice do Linux.
Segundo o manual do GNU nice, um ajuste negativo sem permissão pode gerar um aviso e ainda executar o comando sem aquele ajuste. Não interprete uma mensagem de prioridade como prova de que o programa não foi iniciado; examine o valor efetivo e o resultado do comando.
Nice não define uma porcentagem máxima de CPU, um limite de memória nem configura diretamente a prioridade de entrada e saída de disco. Seu efeito depende de haver trabalhos concorrentes e da política de agendamento. No Linux, o valor influencia as políticas normais SCHED_OTHER e SCHED_BATCH; não equivale a atribuir uma prioridade de tempo real.
O agrupamento automático de sessões, chamado autogroup, e os grupos de controle de recursos, os cgroups, também podem mudar como o tempo de CPU é repartido. Por isso, comparar dois terminais isolados não garante uma demonstração simples do efeito de NI. O manual de agendamento do Linux detalha essas condições. Antes de ajustar um trabalho lento, identifique se o gargalo é CPU, memória ou entrada e saída.
Pergunta frequente
Nice -n 10 deixa o comando dez vezes mais rápido?
Não. O número 10 é um ajuste somado ao valor nice herdado. Um valor maior normalmente reduz a prioridade relativa quando há disputa por CPU; ele não expressa um fator de velocidade nem uma porcentagem de uso. Mesmo com NI maior, um processo pode utilizar a CPU disponível quando não há concorrência.




