Como definir prioridades de processo com nice e renice no Linux

Os comandos nice e renice permitem que você ajuste como o kernel trata seus processos ajustando suas prioridades. Leia este tutorial para aprender como usá-los no Linux e em sistemas operacionais semelhantes ao Unix, como o macOS.

É tudo uma questão de processo

Dentro do seu computador Linux ou semelhante ao Unix, haverá muitos processos em execução antes mesmo de você iniciar o aplicativo que deseja usar. A maioria desses processos são elementos vitais do próprio Linux ou processos de suporte para o seu ambiente de desktop gráfico. Há muita coisa acontecendo nos bastidores. Claro, existem tantos recursos do sistema e tempo de CPU disponíveis. O kernel do Linux é o controlador de todos esses processos.

É o kernel que deve decidir quais processos receberão atenção e recursos agora, e quais terão que esperar. O kernel está continuamente fazendo malabarismos com processos e prioridades para garantir que o computador funcione da melhor maneira possível e que todos os processos tenham seu compartilhamento apropriado. Alguns processos recebem tratamento preferencial. Eles são tão importantes para a operação geral do computador que suas necessidades têm que vir antes de, digamos, seu navegador.

O bom valor

Um dos critérios usados ​​para determinar como o kernel trata um processo é o valor agradável. Cada processo tem um bom valor. O valor legal é um número inteiro no intervalo de -19 a 20. Todos os processos padrão são iniciados com um valor bom de zero.

O truque aqui é que quanto maior o valor agradável, mais agradável será o seu processo para os outros processos. Em outras palavras, um valor bom alto diz ao kernel que esse processo está feliz em esperar. Um número negativo é o oposto de ser legal. Quanto maior o valor negativo agradável, mais egoísta é o processo. Ele está tentando obter o máximo de tempo de CPU possível, sem levar em consideração os outros processos.

Podemos usar o comando nice para definir o valor agradável quando um processo é lançado e podemos usar o renice para ajustar o valor agradável de um processo em execução.

O bom comando

Podemos usar o comando nice para ajustar o valor agradável de um programa à medida que o iniciamos. Isso nos permite aumentar ou diminuir a prioridade dada ao processo pelo kernel, em relação aos outros processos.

Vamos supor que um programador escreveu um programa chamado ackermann. Isso calcula Funções de Ackerman. É um processo intensivo de CPU e memória. O programador pode iniciar o programa com o seguinte comando:

./ackermann

Podemos usar o comando top para ver o programa em execução.

top

Podemos ver os detalhes do programa ackermann no topo. O bom valor é a figura na “coluna NI”. Ele foi definido como zero, como esperávamos.

Vamos reiniciá-lo e desta vez torná-lo menos exigente. Definiremos um bom valor de 15 para o programa ackermann como segue. Digite nice, um espaço, -15, outro espaço e, em seguida, o nome do programa que deseja iniciar. Em nosso exemplo, nosso programador fictício está usando ./ackermann.

nice -15 ./ackermann

Preste atenção, o “-15” não é quinze negativos. São quinze positivos. O “-” é necessário para informar que estamos passando um parâmetro. Para indicar um número negativo, você deve digitar dois caracteres “-”.

Se agora começarmos de novo, podemos ver a mudança no comportamento de ackermann.

top

Com um bom valor de 15, ackermann não está consumindo muito tempo da CPU. O GNOME e o Rhythmbox estão usando mais. Nós refreamos Ackermann um pouco.

Agora vamos fazer o inverso e dar a ackermann um valor legal negativo. Observe o uso de dois caracteres “-”. Para tornar um aplicativo mais egoísta e menos agradável, você deve usar o sudo. Qualquer um pode tornar seu aplicativo mais agradável, mas apenas os superusuários podem torná-lo mais egoísta.

sudo nice --10 ./ackermann

Vamos começar e ver que diferença isso fez.

top

Desta vez ackermann tem um bom valor de -10. Ele está de volta à linha de frente e consumindo mais tempo da CPU do que antes.

O Comando Renice

O comando renice nos permite ajustar o valor legal de um processo em execução. Não precisamos pará-lo e reiniciá-lo com o Nice. Podemos definir um novo valor imediatamente.

O comando renice usa o ID do processo, ou PID, do processo como um parâmetro de linha de comando. Podemos extrair o ID do processo da coluna “PID” no topo, ou podemos usar ps e grep para encontrá-lo para nós, como segue. Obviamente, você digitará o nome do seu usuário em vez de dave e o nome do processo no qual está interessado em vez de ackermann.

ps -eu dave | grep ackermann

Agora que temos o PID, podemos usá-lo com o renice. Vamos definir ackermann de volta para um comportamento mais agradável com um bom valor de cinco. Para alterar o valor agradável de um processo em execução, você deve usar sudo. Observe que não há “-” no parâmetro 5. Você não precisa de um para números positivos e só precisa de um, não dois, para números negativos.

sudo renice -n 5 2339

Recebemos a confirmação de que renice alterou o valor agradável. Mostra-nos o valor antigo e o novo valor.

O kernel geralmente faz um ótimo trabalho ao lidar com as prioridades e distribuir o tempo da CPU e os recursos do sistema. Mas se você tem uma tarefa longa e que exige muito da CPU para executar e não se importa quando ela é concluída, isso fará com que seu computador funcione um pouco mais suavemente se você definir um valor agradável mais alto para essa tarefa. Isso será melhor para todos.