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.