Principais Comandos de Gestão e Prioridade de Processos no Linux

O artigo apresenta alguns dos principais comandos para controle de processos do Linux, tais como: ps, kill, fg e bg. Também serão mostrados alguns exemplos de uso dos comandos.

[ Hits: 7.542 ]

Por: Amaury Borges Souza em 23/09/2019 | Blog: https://amaurybsouza.medium.com/


Introdução



Vou iniciar o artigo apresentando alguns dos principais comandos para controle de processos do Linux, tais como: ps, kill, fg e bg. Também serão mostrados alguns exemplos de uso dos comandos.

Conceitos e Sinais de Processos

O primeiro processo do sistema é o: init, ID == 1.

Processo: todo programa, aplicativo que você inicia, todos os scripts que são executados são processos dentro do Linux.

PID: é o Process ID, o número de identificação que cada processo recebe. O único PID fixo existente é o PID do processo INIT, que é o de número 1.

NICE NUMBERS: é o número de prioridade de execução de um processo. Se um processo é executado com maior prioridade, ele usa os melhores recursos de processamento para sua execução, enquanto se for prioridade baixa, ele depende que outros processos que não estejam utilizando estes recursos para que ele também possa fazer uso. Os NICE NUMBERS vão de -20 até 19, sendo a maior a prioridade negativa.

Sinais de Processos

Para saber o que se pode fazer com cada processo que está em execução, é preciso entender os sinais de processos.

Os mais importantes são:

1 - HUP ou SIGHUP: instrui o serviço a reler o seu arquivo de configuração (operação de reload).

2 - INT ou SIGINT: interrompe um processo em primeiro plano (é o mesmo que Ctrl+c).

9 - KILL ou SIGKILL: interrompe bruscamente um processo. Este sinal deve ser utilizado em último caso, pois ele pode causar danos aos arquivos envolvidos no processo.

12 - USR2 ou SIGUSR2: interrompe processo do usuário fazendo logoff no mesmo.

15 - TERM ou SIGTERM: é enviado para todos os processos do sistema assim que ele entra em desligamento. Este sinal fecha todos os arquivos abertos do processo antes de terminá-lo, não causando nenhum tipo de dano a eles. Este é o sinal padrão da maioria dos comandos e programas que terminam processos justamente pela sua elegância.

18 - CONT ou SIGCONT: continua processos que foram parados pelo sinal 20, enviando-os para background.

20 - TSTP ou SIGTSTP: interrompe processos de forma que eles possam ser reiniciados depois pelo sinal 18. É o mesmo que a combinação de teclas Ctrl+z.

Comandos Básicos de Controle de Processos

#& - coloca o processo em background, passando primeiro o comando e depois o &.

Colocando o processo com "&" no final, ele já inicia em background:

gnome-calculator &
[2] 2594

Ctrl+z - interrompe o processo e coloca em background:

jobs -l
[3]+  9064 Stopped                 gnome-calculator

bg - coloca o processo em background:
[3]+ gnome-calculator &

# bg - envia um processo parado com sinal 20 (Ctrl+z) para background.

firefox & - executando em background:
[1] 2477

bg 2 - especifica qual processo você que em background.

# fg - coloca o processo rodando em foreground, fica preso ao terminal, primeiro plano.

# jobs - mostra os processos que estão rodando em background.

jobs -l - mostra o PID dos processos, status e o nome dele.

# kill - envia sinais para um processo.

Outro detalhe importante, é que o sinal padrão do comando kill é 15, pois é o sinal mais aconselhável para terminar uma tarefa, ou seja, terminar um processo com o comando kill sem especificar qualquer argumento, leva-o a terminar o processo com o sinal 15.

kill -l - mostra todos os tipos de sinais que podem ser enviados para o comando kill.

ps aux | grep firefox - ver o PID do Firefox.

pgrep firefox - mostra o PID do Firefox.
4441

kill 4441 - mata o processo de forma "suave".

kill -s SIGKILL 4500 - envia um sinal para forçar o término do processo.

kill -s 9 4557 - mata o processo.

kill -9 4557 - mata o processo.

kill -SIGKILL 4557 - mata o processo.

Terminando o processo de PID 913 com o sinal 15(TERM):

kill -15 913
Ou:
kill TERM 913
Ou:
kill 913

Comandos para Tratar as Prioridades de Processos

# nice - executa um processo com prioridade específica.

nice -n 15 firefox & - definindo prioridade de valor 15 para o Firefox.
Ou:
nice -15 firefox &

nice -n -15 gnome-calculator & - definindo mais prioridade para o processo Firefox, somente root.
Ou:
nice --15 firefox gnome-calculator - omitindo o "-n" que serve também para prioridade negativa.

ps -la | grep 16007 - mostra o processo do Firefox e o número nice.
0 S     0 16007  8037  0  95  15 - 200066 SyS_po pts/1   00:00:00 gnome-calculato

nice --adjustment=10 - outra forma de definir processo como comando nice.

Dicas:
  • Valores podem ser definidos entre -20 (valores negativos mais prioridade) a +19 (valores positivos menos prioridade).
  • Todo processo começa com prioridade 0.
  • A prioridade padrão do comando nice é 10 quando nada é setado.
  • Somente o root pode dar prioridades negativas entre -19 e -1 a processos.
  • Usuários não privilegiados podem iniciar os processos com prioridades de 0 a 19.

Exemplos: clonando o disco /dev/sda em /dev/sdb, com prioridade -15:

nice --15 dd if=/dev/sda of=/dev/sdb

Fazendo backup compactado do diretório /home com prioridade 2:

nice -2 tar cjvf /root/backup_users.tar.bz2 /home

# ps - a ser descrito posteriormente.

# renice - altera a prioridade de um processo que está em execução.

ps -la | grep calcu
0 S     0 16007  8037  0  95  15 - 200066 SyS_po pts/1   00:00:00 gnome-calculato

renice -n 8 16007
16007 (process ID) com prioridade antiga 15, prioridade nova 8

Ou: renice 8 16007 - alterando prioridade positiva para o processo.

renice -n -8 16007
Ou:
renice -8 16007 - alterando a prioridade negativa para o processo.

renice -u lpi1 -n 5 - altera a prioridade de todos os processos do usuário lpi1 para o valor 5.

renice -g lpi1 -n 5 - alterando o grupo do processo.

Mudando a prioridade do processo de PID 1811 para -16:

renice -16 1811

Mudando para 4 a prioridade do processo de PID 1902:

renice 4 1902

Mudando a prioridade de todos os processos do usuário operador para -17:

renice -17 u operador

# top - números que mostram o nice e renice do comando top.
  • NI e PR - prioridade do processo naquele momento.
  • NI - alterado por dois comandos, nice e renice.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Sistema de gerenciamento de logs do Linux

Trilha Filesystems Linux - Operação de Sistemas de Arquivos

Gerenciamento de pacotes Debian - principais comandos LPIC-1

Leitura recomendada

Configuração do Ubuntu 16.04 para acesso com cartão ao Banrisul

Distribuições GNU/Linux em computadores limitados ou antigos

O mínimo que você precisa saber sobre o terminal (parte 2)

Linux, aí vamos nós!

Funcionamento de um cluster Linux: Parte II - A revanche

  
Comentários
[1] Comentário enviado por Deleve em 14/10/2019 - 08:19h

Muito bom artigo, tava bem estudando essa parte mesmo. Gostaria de fazer parte de algum grupo linux ou hacker no rio de janeiro, se alguém souber de algum, por favor me indique.

[2] Comentário enviado por amaurybsouza em 14/10/2019 - 08:28h

Olá, bom dia amigo.

No Telegram existem mitos grupos de Linux, DevOps, dá uma procurada que você consegue entrar em um deles.

Obrigado pela leitura do artigo.

[3] Comentário enviado por meinhardt_jgbr em 26/06/2020 - 20:34h

Amaury,
Muito bom e claro seu artigo. Me tirou de um aperto. Estava tratando de alterar a prioridade de um aplicativo critico, primeiro usando o monitor de sistema do Ubuntu e este não permitia alterações. Não encontrei o nome do aplicativo Monitor do Sistema para tentar fazer rodar com maiores poderes usando o sudo via terminal. Teu artigo foi um achado. Só fiquei com uma dúvida. Uma vez alterada a prioridade com o comando renice, esta alteração é permanente ou precisa ser renovada cada vez que o aplicativo for iniciado?

[4] Comentário enviado por meinhardt_jgbr em 28/06/2020 - 00:13h

Já vi que é necessário renovar a alteração de prioridade toda a vez que o aplicativo for reiniciado, pois o mesmo roda a partir do wine.
Você poderia indicar alguma solução? O problema é que o aplicativo troca de numero de processo a cada vez que re-inicia. Estou tentando encontrar uma forma de manter a prioridade alta sempre que for usar este aplicativo.

[5] Comentário enviado por amaurybsouza em 28/06/2020 - 09:14h


[4] Comentário enviado por meinhardt_jgbr em 28/06/2020 - 00:13h

Já vi que é necessário renovar a alteração de prioridade toda a vez que o aplicativo for reiniciado, pois o mesmo roda a partir do wine.
Você poderia indicar alguma solução? O problema é que o aplicativo troca de numero de processo a cada vez que re-inicia. Estou tentando encontrar uma forma de manter a prioridade alta sempre que for usar este aplicativo.


Ola meinhardt, posso pesquisar mais a fundo para você sobre isso, eu sei que precisa setar a prioridade como você disse na inicialização. Obrigado por contribuir!

[6] Comentário enviado por meinhardt_jgbr em 29/06/2020 - 00:34h

Eu também vou seguir buscando a solução. Grato pela resposta e pelo interesse no assunto.

[7] Comentário enviado por eddiesaliba em 29/07/2021 - 16:11h


[3] Comentário enviado por meinhardt_jgbr em 26/06/2020 - 20:34h

Amaury,
Muito bom e claro seu artigo. Me tirou de um aperto. Estava tratando de alterar a prioridade de um aplicativo critico, primeiro usando o monitor de sistema do Ubuntu e este não permitia alterações. Não encontrei o nome do aplicativo Monitor do Sistema para tentar fazer rodar com maiores poderes usando o sudo via terminal. Teu artigo foi um achado. Só fiquei com uma dúvida. Uma vez alterada a prioridade com o comando renice, esta alteração é permanente ou precisa ser renovada cada vez que o aplicativo for iniciado?


Oi Amaury, muito bom este tutorial. Parabéns!

Estou com o mesmo problema destacado acima, porém NÃO estou executando o Linux no Wine. Ou seja, o Linux (Debian 10) é o sistema operacional da máquina. Contudo, da mesma forma, toda vez que reinicio o computador os processos aos quais fiz alteração de prioridade voltam a ter sua antiga prioridade. O valor do “nice” volta a ser 0 (zero). Em resumo, as modificações que fiz com a utilização do comando “renice” se perdem.

Seria possível fazer com que estas modificações não se percam após o boot no sistema operacional?

Ou existe algum arquivo que seja executado após o carregamento de todos os processos na mémoria, no qual possamos criar um script para realizar a alteração do valor do "nice" de forma automática em toda reinicalização do sistema?

De antemão, muito obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts