Processos em Linux

Em sistemas Linux, qualquer aplicação corre no terminal, o que permite ter um maior controlo do que está a acontecer no sistema. Neste artigo, vamos mostrar várias maneiras de ver os processos que estão em execução e como manipulá-los.

Processos são programas em execução, criados quando um comando é executado. Em Linux, existem cinco processos comuns: ‘pai’, ‘filhos’, ‘orfãos’, ‘zombies’ e ‘daemons’. Todos eles têm características diferentes, mas têm em comum um número identificador chamado de ‘PID’ (Process Identifier), o que significa que o processo associado, por exemplo, a uma aplicação que estiver com algum comportamento estranho ou deixar de funcionar, pode ser identificado facilmente através do gestor do sistema gráfico padrão da distribuição Linux que usar. No caso do ambiente gráfico Kde Plasma, o ‘ksysguard’ é usado para esse efeito. Nem sempre conseguirá usar a aplicação gráfica para ver ou terminar um processo e, por isso, é importante saber como fazer isso na linha de comandos, mas para isso, é preciso identificá-lo.

Identificar o processo
No terminal Linux, existem várias ferramentas livres instaladas. Duas delas são os comandos top e o ps. O top apresenta informações resumidas do sistema em tempo real, bem como uma lista de processos geridos pelo kernel, que podem ser ordenados por ordem e tamanho. Uma alternativa ao top é o htop, que facilita a navegação e apresenta cores, o que ajuda na visualização.

O ps mostra a informação que procura no momento, ou seja, a informação estática. No entanto, é muito usado, juntamente com o comando ‘grep’, para especificar a procura pelo nome do processo. Estes são alguns dos comandos mais usados:

    • Procurar por todos os processos do utilizador actual: ps -x

    • Procurar por todos os processos de um utilizador especifico: ps -u root

    • Procurar por todos os processos no sistema num formato mais completo: ps -ef

  • Procurar por um processo especifico (keybase, por exemplo): ps -ef | grep keybase

Terminar um processo
Um dos comandos mais usados é o kill, que deve ser usado em especifico com base no ID de cada processo. Aliás, uma aplicação poderá ter ‘processos filho’ associados e fará sentido o seu uso. Nestes casos, usar o comando ps juntamente com um grep ao nome da aplicação, vai ajudar a descobrir o ID do processo a ser terminado. Outra maneira mais simples é usar o comando pgrep. Aqui ficam alguns exemplos:

    • Terminar o processo da forma correta (default sigterm signal 15): kill <PID>
    • Termina o processo sem esperar pelos ‘processos filho’: kill -1 <PID>
    • Força o encerramento do processo logo sem esperar pelos ‘processos filho’: kill -9 <PID>
    • Lista apenas os ID dos processos: pgrep <nome>

    • Lista os ID dos processos e o caminho: pgrep -a <nome>

  • Lista os ID dos processos de um utilizador: pgrep -u <utilizador>

No entanto, em algumas situações, o comando pkill, pode fazer mais sentido, porque faz o mesmo que o kill e ainda termina o processo com base no nome:

  • Terminar um processo com base no nome: pkill <nome>
  • Terminar apenas os processos com nome httpd e não httpd5 etc: pkill -x httpd

Processos em primeiro e segundo plano
Os sistemas Linux são compatíveis com a execução de vários processos que correm em primeiro plano, ou seja, um comando ou tarefa que se espera ser concluído. O mesmo pode obrigar à interacção do utilizador e, normalmente, fica visível. Um exemplo simples é correr um comando no terminal e esperar pelo resultado. Os processos a correr em segundo plano não obrigam a esperar pelo fim do primeiro e podem ser criados vários. Um exemplo é correr um comando no terminal e acrescentar um ‘&’ no fim. É possível, depois, ir alternando entre tarefas; aqui, pode usar os comandos fg (Foreground) e bg (Background).

Sigterm Signal
Às várias maneiras de terminar um processo dá-se o nome de ‘sigterm signal’. Para ver a lista de todas as várias formas de terminar um processo, corra o comando kill -l. As mais usadas são: o ‘1’, o ‘9’ e o ’15’:

  • ‘1’: reinicia o processo sem esperar pelos ‘processos filho’ que estão associados;
  • ’15’: termina de forma correta e espera pelos ‘processos filho’;
  • ‘9’: força o encerramento do processo, o que em alguns casos como base de dados não será melhor forma de usar.

Por padrão, tanto o comando kill como o comando pkill, usam o número ’15’ como ‘sigterm signal’, o que significa que se usar apenas kill ou pkill, sem especificar o ‘sigterm’, será encerrado o processo de forma correta.

Em resumo:
É muito interessante saber o que está a correr no sistema: a quantidade de memória que uma aplicação está a usar, quantos processos estão a correr, quais estão a dar problemas, que prioridades têm no sistema e que processos estão a correr em segundo plano – a lista continuaria. Para quem usa sistemas Linux em casa, saber onde procurar e como terminar processos, seja com o gestor gráfico ou no terminal, ajuda a agir quando há um comportamento estranho no sistema.