2.6 Gerenciando processos

Lição 21/50 | Tempo de Estudo: 10 Min

O kernel do Linux gerencia multitarefas por meio do uso de processos. O kernel mantém informações sobre cada processo para ajudar a manter as coisas organizadas, e cada processo recebe um número chamado ID de processo (PID).

O shell Linux também introduz o conceito de jobs para facilitar o fluxo de trabalho do usuário durante uma sessão de terminal. Como exemplo, cat error.txt | wc -m é um pipeline de dois processos, que o shell considera um único job. O controle de job se refere à capacidade de suspender seletivamente a execução de jobs e retomar sua execução em um momento posterior. Isso pode ser alcançado com a ajuda de comandos específicos, que exploraremos em breve.


Processos em background (bg)

Os trabalhos anteriores neste módulo foram executados em primeiro plano, o que significa que o terminal está ocupado e nenhum outro comando pode ser executado até que o atual termine. Como a maioria dos nossos exemplos foram curtos e agradáveis, isso não causou problemas. No entanto, estaremos executando comandos mais longos e complexos em módulos posteriores que podemos enviar para o segundo plano para recuperar o controle do terminal e executar comandos adicionais.

A maneira mais rápida de colocar um processo em segundo plano é anexar um e comercial (&) ao final do comando para enviá-lo para o segundo plano imediatamente após seu início. Vamos tentar um breve exemplo:

ping -c 500 127.0.0.1 > pings.txt &


No comando acima enviamos 500 solicitações de echo ICMP para a interface local com o comando ping e gravamos os resultados em um arquivo chamado pings.txt. A execução roda automaticamente em segundo plano, deixando o shell livre para operações adicionais.

Mas o que teria acontecido se tivéssemos esquecido de acrescentar o e comercial no final do comando? O comando teria sido executado em primeiro plano, e seríamos forçados a cancelar o comando com CTRL +C  ou esperar até que o comando termine para retomar o controle do terminal. A outra opção é suspender o trabalho usando CTRL +Z depois que ele já tiver iniciado. Uma vez que um trabalho tenha sido suspenso, podemos retomá-lo em segundo plano usando o comando bg:

O job agora está sendo executado em segundo plano e podemos continuar usando o terminal como quisermos. Ao fazer isso, tenha em mente que alguns processos são sensíveis ao tempo e podem dar resultados incorretos se forem deixados suspensos por muito tempo. Por exemplo, no exemplo do ping, a resposta de echo pode retornar, mas se o processo for suspenso quando o pacote chegar, o processo pode perdê-lo, levando a uma saída incorreta. Sempre considere o contexto do que os comandos que você está executando estão fazendo ao se envolver no controle de tarefas.


job control: jobs e fg


Para verificar rapidamente o status de nossas solicitações de echo ICMP, precisamos usar dois comandos adicionais: jobs e fg.


Nesse exemplo iniciei o comando sem colocá-lo em segundo plano. Parei o job (processo) com o CTRL + Z, digitei o comando jobs para ver os processos, depois coloquei ele em primeiro plano com o comando fg,  parei de novo, e em seguida eu peguei o PID  do processo com o comando jobs -l. Agora eu posso matar o processo  com o comando kill.


Controlando processos: ps e kill


Um dos comandos mais úteis para monitorar processos em praticamente qualquer sistema operacional do tipo Unix é o ps (abreviação de process status). Ao contrário do comando jobs, o ps lista processos em todo o sistema, não apenas para a sessão de terminal atual. Este utilitário é considerado um padrão em sistemas operacionais do tipo Unix e seu nome é tão bem reconhecido que, mesmo no Windows PowerShell, o ps é um alias de comando predefinido para o cmdlet Get-Process, que serve essencialmente ao mesmo propósito.

Como PenTester (Red Team) , uma das primeiras coisas a verificar após obter acesso remoto a um sistema é entender qual software está sendo executado na máquina comprometida. Isso pode nos ajudar a elevar nossos privilégios ou coletar informações adicionais para adquirir mais acesso à rede.

Como exemplo, vamos tentar encontrar o  ID de processo (PID) do systemd na linha de comando usando o comando ps:


ps -ef


As opções -ef que usamos acima significam:
- e: selecionar todos os processos
- f: exibir listagem de formato completo (UID, PID, PPID, etc.)

Encontrar nosso aplicativo systemd nessa listagem enorme definitivamente não é fácil, mas como sabemos o nome do aplicativo que estamos procurando, podemos substituir a opção -e por -C (selecionar pelo nome do comando) da seguinte forma:

ps -fC systemd



Conforme mostrado na imagem acima, a busca de processos retornou resultado do qual coletamos o PID do systemd. Reserve um tempo para explorar o manual de comandos (man ps), pois o ps é realmente o canivete suíço do gerenciamento de processos.

Digamos que agora queremos parar o processo do systemd (não faça isso) sem interagir com a GUI. O comando kill pode nos ajudar aqui, pois seu propósito é enviar um sinal específico para um processo.

Fizemos isso com o comando ping anteriormente.

kill -9 [Número Processo]

Olha o VAR:



André Albuquerque

André Albuquerque

Designer de Produto
4.00
Perfil

Sessões de Aula

1- 3.1 Netcat 2- 4.1 Introdução a comandos de rede no Linux 3- 5.1 Shell Script 4- Temas abordados 5- Temas Abordados 6- 1.1 Instalação do Linux 7- 1.3 Atividades Pós-Instalação 8- 1.4 Usuário root e Usuário comum 9- 1.2 Utilizando LVM 10- 1.5 Sistemas de Arquivos 11- 1.6 Comandos Básicos 12- 1.7 Procurando Arquivos 13- 1.8 Gerenciando Serviços no Linux 14- 1.9 Encontrando, instalando e removendo tools 15- 2.1 Ambiente do Shell 16- 2.2 Piping e redirecionamento 17- 2.3 Procurando texto e manipulação 18- 2.4 Editando arquivos 19- 2.5 Comparando arquivos 20- 2.6 Gerenciando processos 21- 2.7 Monitorando arquivos e comandos 22- 2.8 Baixando arquivos 23- Slide Módulo 2 24- 3.2 Socat 25- Atuar com Cyber Security 26- 6.1 Uma Introdução ao Docker 27- 4.2 Introdução a Análise de Rede 28- 4.3 Networking 29- 4.4 Portas e Serviços 30- 4.5 Análise com Wireshark 31- 4.6 Análise com tcpdump 32- 5.2 Variáveis 33- 5.3 Argumentos 34- 5.4 Lendo Entrada 35- 5.5 Estruturas condicionais if, else e elif 36- 5. 6 Loops 37- 5.7 Criando Menus 38- 5. 8 Funções 39- Exemplos Práticos 40- 6.2 Instalação do Docker no Windows e Linux. 41- 6.3 Imagens e Containers 42- 6.4 Mais Prática - Gerenciando Containers 43- 6.5 Criar conta/usuário no Docker Hub 44- 6.6 Docker Cleanup - Limpando a Casa 45- 6.7 Volumes Docker 46- 6.8 Redes no Docker - Isolamento e Segurança 47- 4.0 🔒 Fundamentos de Redes para Cybersecurity 48- 🎯 EXERCÍCIOS PRÁTICOS 49- 🎯 Wireshark - EXERCÍCIOS PRÁTICOS 50- 🎯 TcpDump- EXERCÍCIOS PRÁTICOS