Entendendo processos no Linux
- Vinicius Souza
- Linux
- 18 de abril de 2022
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 !