O Gerenciamento de Processo
Por: Adriana de Quadros • 24/4/2017 • Abstract • 2.304 Palavras (10 Páginas) • 207 Visualizações
Com certeza algum software já travou com você no Linux, ou você simplesmente precisava parar um daemon que estava sendo executado no seu sistema e você não sabia o que fazer pra finalizar aquele processo. Mas nunca mais!
Hoje você vai aprender o que é um processo, como gerenciá-los e como matá-los através do shell do Linux. Você vai ver que isso não é muito complicado, basta conhecer os comandos certos e alguns sinais importantes para que tudo volte a funcionar bem como antes.
Gerenciar processos é uma tarefa básica no Linux. Por isso, recomendo que você leia todos os tópicos descritos aqui para ter um melhor entendimento sobre o assunto. Mas antes, vamos aprender o que é um processo. Afinal de contas, como gerenciar uma coisa que você não sabe muito bem o que é, não é mesmo? :)
O que são processos?
Como você deve imaginar, todo programa de computador (ou software) é formado por linhas de código-fonte. Estas linhas obedecem diferentes regras, dependendo da linguagem (C, C++, Perl, Python, etc.). Quando este código é executado, ele acontece através de um processo criado e gerenciado pelo sistema operacional. Ou seja, um processo pode ser considerado uma instância de um programa em execução. Todo SO trabalha com processos e todo processo tem alguns parâmetros que nos permitem gerenciá-los facilmente e também aceitam sinais enviados automaticamente pelo sistema ou pelo próprio usuário.
No Linux, todo processo contém os seguintes atributos:
Lifetime: Lifetime, ou tempo de vida, é simplesmente o tempo que um processo leva desde a sua criação até a sua finalização. O processo de um comando simples como o ls, por exemplo, tem um tempo de vida bem curto: é criado, exibe os resultados e já é finalizado automaticamente. Outros tipos de processos, como o processo do seu navegador web, por exemplo, tem um tempo de vida mais longo e só “morre” quando você fecha o software. Existem também processos que são iniciados automaticamente quando o SO inicia e só são finalizados (se tudo der certo) quando a máquina é desligada.
Process ID (PID): É necessário um jeito de se identificar um processo de modo que ele possa ser único no sistema. Fazer esta identificação pelo nome do executável que gerou o processo não é uma boa pois podem haver vários executáveis com o mesmo nome, impedindo um identificador único para cada um. Assim, foi criado o Process ID: um número inteiro, sempre diferente para cada processo, que é criado quando o processo inicializa, fica alocado para ele durante todo o lifetime e volta a ficar vago quando o processo morre.
User ID (UID): Processos, assim como os usuários do sistema, precisam obedecer às permissões de arquivos e diretórios pois dificilmente processos precisam ter acesso a todo o sistema. Portanto, todos os processos criados por usuários do sistema têm as mesmas permissões do usuário. Por exemplo, se o usuário X não pode acessar o diretório Y, qualquer processo criado por ele também não irá conseguir acessar este diretório a não ser que você dê as permissões corretas para que isso aconteça. O User ID nada mais é do que a identificação do usuário dono do processo em questão.
Group ID (GID): O Group ID tem a mesma finalidade do User ID, explicado no tópico anterior. A única diferença é que ao invés de ser a identificação do usuário, esta é a identificação do grupo dono do processo (geralmente o mesmo grupo primário do usuário).
Parent Process: Muitos processos são criados por outros processos e uma relação de pai e filhos é criada entre eles. Por exemplo, imagine que o processo X criou os processos Y e Z. X é o “pai” de Y e Z enquanto Y e Z são filhos de X. Simples assim! :)
Parent Process ID (PPID): Este é o Process ID do processo pai do processo que você está analisando no momento. O pai de absolutamente todos os processos em um sistema Linux é o Init, que sempre tem o PID de 1. Quando um processo fica órfão, ou seja, quando o processo pai é finalizado antes de seus filhos, este processo é “adotado” pelo Init.
Environment ou ambiente: Para os processos serem executados corretamente, muitas vezes é necessário que se crie variáveis no sistema para que ele encontre bibliotecas, saiba como se comportar, etc. Convencionou-se falar que estas variáveis formam o “ambiente” do processo. E este ambiente é herdado por todos os filhos de um processo.
Diretório atual: Um diretório qualquer que o processo vai usar para armazenar tudo o que ele precisar durante o seu funcionamento. Muitos softwares permitem que você modifique o diretório atual (chamado de current working directory em inglês) para um outro que você prefira. Porém, lembre-se sempre que para o processo conseguir usar o diretório, o usuário que o iniciou deve ter permissões neste diretório. Se não, o processo não vai conseguir usá-lo por ser bloqueado.
Como você pode ver, a definição de um processo é bem simples: é um programa que está rodando no seu computador. Processos sempre estão presentes em todos os sistemas e, no Linux, você consegue ver todos os parâmetros que forma o ambiente deles através do diretório /proc em formato de arquivos e diretórios. Analisar o /proc é bem interessante para conseguir conhecer mais sobre o seu sistema atual.
Beleza. Agora que já entendemos o que é um processo e o que ele representa para a gente, vamos aprender como gerenciá-los. Obviamente, não vou mencionar aqui como criar um processo já que pra isso basta executar um programa qualquer no sistema e este passo vai variar de acordo com o software em questão.
Também vale lembrar que você deve tomar muito cuidado com qual processo você mata. Pode ser que ao finalizá-lo você torne o sistema completamente instável e precise reiniciar para que tudo volte ao normal. Portanto, não saia matando qualquer processo por aí: tenha certeza de que ele é o processo que você está procurando!
Top
O comando top é um dos mais populares quando se fala de gerenciamento de processos. Um motivo para isso é que ele é extremamente fácil de usar e entender, sem precisar usar parâmetro algum para formatar a saída, se você não quiser.
O top vai gerar uma lista de todos os processos sendo executados no momento e atualizá-la em um intervalo de tempo pré-determinado, dando informações como uso do CPU, uso do CPU por processo (os que estão deixando o processador mais ocupado ficam no topo), PID, nome do processo, informações de uso da memória, etc. Tudo isso num formato de lista simples de compreender e que te dá informações
...