Como definir prioridades de processo com nice e renice no Linux

Bash shell no laptop Ubuntu
Fatmawati Achmad Zaenuri / Shutterstock.com

Os comandos nicee renicepermitem que você ajuste como o kernel trata seus processos ajustando suas prioridades. Leia este tutorial para aprender como usá-los em sistemas operacionais Linux e 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 gráfico de desktop. 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 recebem atenção e recursos agora, e quais devem 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 seu processo será 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.

Recomendado:  Compre uma dessas lanternas antes da próxima queda de energia

Podemos usar o nicecomando para definir  o valor bom quando um processo é iniciado e podemos usar renicepara ajustar o valor bom de um processo em execução .

O bom comando

Podemos usar o nice comando para ajustar o valor legal 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 as funções de Ackerman . É um processo intensivo de CPU e memória. O programador pode iniciar o programa com o seguinte comando:

./ackermann

Comando ackermann na janela do terminal

Podemos usar o topcomando para visualizar o programa em execução.

topo

mais rodando em um terminal

Podemos ver os detalhes do  ackermannprograma em top. 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 ackermannprograma da seguinte maneira. 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

nice 15 comandos na janela do terminal

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

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

topo

mais rodando em um terminal

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

Agora vamos fazer o inverso e fornecer ackermannum valor agradável negativo. Observe o uso de dois caracteres “-”. Para tornar um aplicativo mais egoísta e menos agradável, você deve usar 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

nice -10 comando na janela do terminal

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

topo

mais rodando em um terminal

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.

Recomendado:  Como usar um quadro branco em uma reunião do Microsoft Teams

O Comando Renice

O renicecomando nos permite ajustar o bom valor de um processo em execução. Não precisamos pará-lo e reiniciá-lo com nice. Podemos definir um novo valor imediatamente.

O renicecomando 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” do top, ou podemos usar pse grepencontrá-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 ackermann.

ps -eu dave | grep ackermann

ps canalizado por grep em uma janela de terminal

Agora que temos o PID, podemos usá-lo renice. Vamos ackermannvoltar a 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 5 parâmetro. 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

Comando renice em execução em uma janela de terminal

Recebemos a confirmação de que renicealterou 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.