Entendendo processos no Linux

Entendendo processos no Linux

Entendendo processos no Linux

No sistema operacional um processo é o que representa as operações em execução que estão acontecendo no seu host. Este processo que será o responsável por consumir os recursos necessários do sistema operacional para que as operações funcionem corretamente.

Entender os processos no linux é fundamental para qualquer troubleshooting ou análise de invasão!

1 | Tipos de processos

Os processos são organizados em 3 grupos:

1.1 Tempo real: Processos críticos com prioridade total;
Processadores executam um processo por vez, então os processos críticos tem prioridade na fila de execução. (Lembrando de processadores com 1 núcleo real, máquinas com mais de 1 núcleo real executam mais processos).

2.2 Interativos: Processos que aguardam entradas do usuário;
Processos interativos são os processos do usuário, por exemplo, quando você abre uma calculadora, editor de texto, etc.

2.3 Batch: Processos que tem como objetivo executar operações em lote.
São processos que geralmente são executados muitas vezes, por exemplo, um servidor web, executará diversas vezes a execução do processo do webserver.

Se observar abaixo é possível ver na coluna PR (priority) alguns processos com a sigla “rt”, que são os processos Real Time (tempo real). A imagem abaixo é um trecho do resultado do comando top, que é um dos comandos utilizados para interagir com os processos no Linux.

(em um próximo post falaremos em detalhe como utilizar)

2 | Prioridade

O valor de prioridade varia entre 0 (maior prioridade) e 139 (menor prioridade);
Prioridade entre 0-99 está reservada para aplicações em real time (tempo real) e como vimos acima é exibido pela sigla “rt”.
Geralmente os processos são criados com prioridade 120.

3 | Nice

O valor nice indica para o Kernel como o processo deve ser tratado em relação aos outros processos;
O processo assume o nice do seu processo pai;
O usuário pode aumentar o valor do nice, mas não reduzi-lo, apenas o root tem permissão de realizar este procedimento;

3.1 Nice para processos interativos ou batch

Pode-se ajustar a prioridade de um processo utilizando o nice. Exemplo:

Um processo X é iniciado com priority 120 e Nice 0, ou seja, a prioridade final deste processo é de 120 - 0= 120.

Caso queira aumentar a prioridade de um processo deverá ser extraída a prioridade final ou caso queira diminuir a prioridade deverá ser acrescida.

Prioridade e Nice no comando TOP

A prioridade e o nice são exibidos no comando top conforme imagem acima

4 | PID e PPID

Temos algumas maneiras de se determinar o tipo de um processo, para isso é utilizado as siglas PID e PPID.

4.1 | O PID (Process IDentification) é o ID do processo que esta em execução, onde este número não pode ser utilizado por mais de um processo ao mesmo tempo.

4.2 | O PPID (Parent Process IDentification) é o ID do processo pai do processo em execução.

5 | Inicialização de processos no Linux

Por padrão, quando você inicia um sistema Linux, o kernel Linux é carregado em memória, recebe um sistema de arquivos virtual na RAM e os primeiros comandos são executados.

O processo inicial era chamado de processo init, mas está sendo substituído pelo processo de inicialização do systemd em distribuições Linux recentes.

6 |  Composição de um processo

O processo é composto por diversas informações, dentra elas:

  • Owner do processo;
  • Estado do processo (em espera, em execução, etc);
  • Prioridade de execução;
  • Recursos de memória.

7 | Estado dos processos

Quando um processo é criado, isso não significa que ele será executado em seguida. Além disso, determinados processos podem ser temporariamente pausados para que o processador possa executar um processo prioritário. Isso significa que os processos, em determinados momentos, podem estar em situações de execução diferentes. O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados:

Executável: o processo pode ser executado imediatamente;
Dormente: o processo precisa aguardar algo para ser executado;
Zumbi: o processo perde a referência do processo pai;
Parado: o processo está “parado”, ou seja, não pode ser executado.

8 | Sinais de processos

Os sinais são usados para que os processos possam se comunicar e para que o sistema possa intervir em seu funcionamento. Por exemplo, se o usuário rodar o comando kill para parar um processo, isso será feito através de um sinal.

Se não houver instruções pré-programadas, e é recebido um sinal, o próprio Linux pode executar a ação de acordo com suas rotinas.

Entre os sinais existentes, temos:

  • KILL: tem a função de “matar” um processo;
  • STOP: tem a função de interromper a execução de um processo e só ativa-lo após o recebimento de outro sinal, chamado CONT;
  • CONT: tem a função de instruir a execução de um processo após ele ser interrompido;
  • SEGV: informa erros de endereços de memória;
  • TERM: tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
  • ILL: informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero.

Espero que este primeiro post tenha ajudado a entender um pouco mais sobre processos no Linux.

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !