O que são processos no linux?

(Chuck Norris) — “Diga aos processos, que quem manda aqui sou eu”

Outro termo que podemos usar para nos referenciar a um processo é: “a instância de um programa em execução”
Desta forma, sempre que você executa uma aplicação, ou roda um comando, está iniciando um processo. Sendo assim, eles são uma parte essencial do sistema operacional.

Outro tipo muito importante de processos são os daemons; esses são processos que você não precisa executar ou iniciar. Não interagimos com eles, pois executam seus papéis sozinhos.
Daemons são como serviços e executam ações predeterminadas, sem eles não conseguiriamos fazer muita coisa no Linux, pois rodam e monitoram elementos essenciais; como a parte de redes, impressões (printing), ssh, entre outras.
Eles ficam ligados no background fazendo tais coisas funcionarem.

Como observar processos existentes

Nesta parte do artigo vamos falar sobre alguns recursos que podemos utilizar para monitorar os processos no Linux. Mais à frente no artigo estaremos abordando outras formas de monitora-los e observa-los (top e htop), mas por agora focaremos nos mais simples.

PS

primeiramente vamos falar do comando “ps”, este vai servir para verificarmos os processos que estão rodando.
Quando rodamos apenas o “ps” não iremos ver muita coisa, mas apenas processos rodando no mesmo tty que estamos utilizando:

ps (linux command)

para observar mais processos podemos utilizar, por exemplo, o comando “ps -u $USER”, onde veremos processos que estão sendo utilizados pelo usuário atual.
Se quisermos observar informações de um processo específico (digamos que estamos rodando o firefox, por exemplo), podemos executar “ps -u $USER | grep firefox”, e nesse caso receberemos apenas as informações de processos utilizados pelo usuário e referentes ao firefox:

ps -u $USER | grep firefox (linux command)

Você tambem pode usar “ps axu” para ver todos os processos de um sistema, utilizando a sintaxe BSD.

PGREP

Mesmo que possamos usar “ps” + “grep” para buscarmos um processo pelo nome, existe uma maneira mais facil de fazer isso, o comando “pgrep”, que irá nos retornar apenas o ID do processo. Vamos usar novamente o exemplo do firefox:

pgrep firefox (linux command)

podemos, também utilizar “pgrep -a”, para retornar mais informações sobre o processo:

pgrep -a firefox (linux command)

Como matar processos (e como usar o comando kill mais profundamente)

Chucky — “Chegou a hora de matar alguns processos”

Comando “Kill”

Agora vamos falar sobre algo que, talvez, seja uma das questões mais importantes. Como podemos matar um processo que simplesmente não queira funcionar.
O comando que executa esta ação é muito simples, e possivelmente, o mais facil de lembrar, simplesmente “kill”.

Vamos seguir com o exemplo utilzado acima com o comando “ps”, digamos que queremos matar o “firefox”, não podemos apenas digitar “kill firefox”, ao invés disso precisamos enviar o ID do processo.

Vamos então, verificar o ID do processo rodando firefox, com o comando “ps -u $USER | grep firefox”:

ps -u $USER | grep firefox (linux command)

Ou poderíamos ter utilizado o “pgrep”, como vimos anteriormente:

pgrep firefox (linux command)

Vemos, assim, que o ID do processo é 5885.

Agora, se apenas digitarmos “kill 5885”, que nosso firefox morrerá.

Mais formas de matar um processo (e relalizar outras ações), utilizando o comando “kill”.

Agora vamos falar sobre mais formas de se utilizar o comando “kill”, essas formas são os sinais que podemos dar junto ao comando (um exemplo de uso seria “kill -9 4042”, sendo 9 o sinal e 4042 o ID do processo).

E, para ver uma lista de todos os sinais possíveis de se dar para o comand kill, basta rodar o comando “kill -l”:

Para facilitar, vou deixar aqui uma lista dos SIGs, os quais acredito serem utilizados de forma mais frequente, com uma breve explicação:

Como monitorar processos com top e htop

Top e htop são comandos muito parecidos, a maior diferença é o fato de o htop ser interativo e ter uma interface mais bonita (mesmo que ainda no terminal).
Eles vão te mostrar os processos que estão rodando em sua máquina, neles você também consegue ver o seu uso de memoria, swap e CPU.

Abaixo uma imagem com o header do htop, contendo as informações que ele te mostra sobre cada processo:

Além disso, você também pode utilizar as function keys para realizar ações como ordenar, matar, pesquisar processos, entre outras:

Processos em primeiro plano e em plano de fundo

O que são?

Primeiramente, acho importante explicar o que são processos em primeiro plano e processos em plano de fundo:

  • processo em primeiro plano (ou foreground process): processos onde o uso do terminal é interrompido e utilizado somente para ele.
  • processo em plano de fundo (ou background process): processos nos quais você pode continuar usando o terminal enquanto este roda por trás, por mais que os logs apareçam.

Utilização:

Gostaria de começar esta parte com um exemplo, e para isso vamos usar um comando bem famoso, o “ping”, esse comando, de forma simples, utiliza o protocolo ICMP para mandar sinais a um host ou gateway e recebe a resposta dele.

Podemos utilizar o comando “ping -c 1000 google.com”, neste caso estaremos iniciando um processo em primeiro plano, que mandará 1000 requisições para o site google.com, a partir deste ponto podemos observar algumas outras questões, que serão mencionadas a seguir:

  1. Podemos inicializar o mesmo processo, porém em plano de fundo, ao executarmos o comando com um “&” no final, por exemplo “ping -c 1000 google.com &
  2. Podemos utilizar de atalhos enquanto o processo está em primeiro plano, para executar comandos “kill”:
    — Um desses atalhos seria o Ctrl+Z, com ele colocaremos o processo para dormir. Assim ele ira parar de executar e só voltará quando requisitarmos.
    — Outro seria o Ctrl+C, que irá matar o processo com SIGINT.
    É importante lembrar que isso não funcionará caso o processo esteja em plano de fundo.
  3. Podemos utilizar o comando “jobs”, que mostra os jobs que estão rodando e os que foram parados, ao executarmos o comando “jobs”, os job ids também serão visíveis para nós, com esses ids poderemos realizar algumas ações:
    — bg <job_id> faz um processo ir para plano de fundo (background). Assim você não consegue para-lo com Ctrl+C ou Ctrl+Z, mas pode utilizar o terminal.
    — fg <job_id> faz um processo ir para primeiro plano (foreground).

--

--