quarta-feira, 9 de setembro de 2015

Controlando processos no Linux

Desde que comecei a utilizar o Linux como meu sistema, sempre tive dificuldades com o controle de processos. Não sei se por preguiça, não sei se minha memória falha, mas só sei que nunca gravei o comando ps aux que é justamente o comando que lista os processos. E mesmo agora, ESCREVENDO isto, não tenho certeza de que amanhã ou depois simplesmente vou precisar matar um processo qualquer e vou esquecer o danado do comando. 

Entretanto, navegando por aí, encontrei um post muito bom sobre o gerenciamento de processos no Linux, e claro vou compartilhá-lo aqui.



PROCESSOS NO LINUX

O intuito desse pequeno artigo é transmitir para vocês leitores de uma forma simples e clara sobre processos no GNU/LINUX. Irei abordar conceitos, finalização e visualização de processos.

Definição

Processos são aplicativos ou shell que estão sendo executados. Todo processo possui um identificador chamado PID (Identificador do Processo) e este pode a vir ser duplicado com o intuito de delegar novas tarefas para sua cópia, a duplicação de um processo resulta no processo filho e este possuirá um PPID ou (Identificador de Processo Pai) que nada mais é do que o PID do processo PAI.

A figura abaixo ilustra melhor a definição de PID e PPID.
O comando ps alx mostra a identificação dos processos  filhos (PID) e o processo pai (PPID).


O que um processo contém?
Um processo contém várias informações, através destas é possível visualizar o usuário, porcentagem do consumo de memória e processador dentre outras informações. Abaixo segue algumas características de um processo.

USER – O usuário que se iniciou o processo.
PID – O número de identificação do processo.
%CPU – Consumo do processador que o processo está rodando.
%MEM – Consumo de memória.
STAT – Estado do processo.
VSZ – Tamanho virtual do processo.
TTY – Identificador do terminal do processo.
RSS – Quantidade de memória (KB).
START – Data em que o processo foi iniciado.
COMMAND – Comando que esta em execução no processo.

Através do comando ps aux é possível visualizar essas informações conforme mostrado na figura abaixo.

O diretório /proc

O diretório /proc contém todos os processos que estão sendo executados no sistema organizados por pastas (cada pasta contém o pid de cada  processo em execução).

Executando um simples ls /proc é possível visualizá-los.


Visualizar processos

O Linux possui vários comandos no terminal para visualização de processos.

PS

O comando PS mostra informações sobre processos ativos no sistema.

A sintaxe básica do comando PS é ps [opções]



ps aux  – Mostra todos os processos ativos de todos os usuários.

ps alx – Mostra os processos ativos, não mostra o nome de usuário mas contém outros atributos da caracterísitca de um processo como o  PPID.

ps -eo user,pid,%mem,%cpu,command – Com esse comando podemos “falar” para o comando ps apenas exibir as características dos processos contendo os atributos usuário, consumo de memória e de processador e o comando executado.

ps -eo pid,stat|grep Z – O comando abaixo lista apenas o pid e o estado dos processos redirecionando a saída para o comando grep que listará apenas os processos com estado “morto”

TOP

Através do comando top você consegue visualizar em tempo real os processos do linux em execução.


HTOP

O comando htop tem o mesmo propósito do top, visualizar os processos em tempo real mas de uma forma mais amigável, ele contém uma barra de rolagem para ser mais fácil a visualização de processos. Apenas aperte Page Dn ou Page Up ou as setas direcionais.


Planos de um processo

Os processos são executados em  2 planos distintos:

Primeiro Plano ou Foreground: Processos que bloqueiam o terminal quando está sendo executado.

Execute o comando fg número do job.

Segundo Plano ou Background: Processos que não bloqueiam o teminal.

Para colocar o processo em background execute o comando bg número do job.

Obs.: Para executar os comandos  informados acima é necessário que o processo seja parado CTRl+Z e depois ser executado o comando bg+número do job ou fg +número do job. Você pode conseguir o número do job através do comando jobs.

Podemos exemplificar executando no terminal o thunderbird após aberto pressione as teclas CTRL+Z e execute o comando jobs e será listado o thunderbird.


Após parar o processo do thunderbird execute  o comando bg 1, o processo será  colocado em background.

Prioridades de processos

Os processos no linux possuem suas prioridades na execução e as mesmas são definidas pelos comandos nice e renice. O comando nice tem por objetivo iniciar um processo com uma determinada prioridade, já o comando renice  define a prioridade de um processo que esteja em execução.
Os valores de prioridades variam de +19 a -20, quanto menor for o valor maior prioridade o processo terá.

A figura a seguir mostra o campo NI(relacionado a prioridade do processo) após executarmos o comando ps alx.

O uso e entendimento dos comandos nice e renice são facéis apenas execute:

nice aplicativo ou nome do binário + numero da prioridade.
renice nome do processo ou aplicativo + numero da prioridade.

nice  thunderbird 10

renice thunderbird 5

Finalização de Processos

Um sinal é a forma de como os processos podem se “comunicar”. Através dos sinais é possível “dizer” ao processo para ser parado, finalizado “gentilmente”, retomado a sua execução ou finalizado de forma forçada dentre outros sinais. No linux  uma das ferramentas utilizadas para realizar o procedimento de envio de sinais é o comando Kill.
Os processos possuem diversos sinais que podem ser visualizados através do comando Kill -l.


Na tabela abaixo segue informações sobre alguns dos sinais mais utilizados.
Sinal Código em Linux Ação Descrição
SIGKILL 9 Terminar o processo Matar
SIGSTOP 19 Parar o processo  processo filho parado ou terminado
SIGCONT 18
Continuar a execução do processo, o shell envia o sinal quando executamos os comandos bg ou fg
SIGTERM 15 Terminar o processo Sinal de término, quando é solicitado gentilmente o término do processo.

A sintaxe básica do comando kill é a seguinte:

Kill [sinal] número do pid.

Kill -9 121 – Esse comando irá finalizar o processo de forma forçada (Matar).

Kill -19 2556 – O sinal 19 irá parar o processo.

Kill -18 2556  – O sinal 18 irá retomar a execução do processo.



KILLALL

O comando killall tem o mesmo propósito que o Kill enviar sinais aos processos, mas ele trabalha de uma forma diferente. Ao executar o comando killall -l é exibido a tabela de sinais conforme figura abaixo.


O comando killall possui a seguinte sintaxe killall nome do processo. Ao se executar o comando será finalizado o processo.

killall firefox

Para especificar qual sinal será enviado utilize a opção -s.

killall -s -KILL firefox

killall -s -STOP firefox

__________________________
Referências Bibliográficas

Adilson Rodrigues Bonan. Linux Fundamentos, Prática e Certificação LPI. Rio de Janeiro:Alta Books 2010.
Nemeth Evil,Snyder Garth, Trent R Hein.Manual Guia do Administrador Linux.São Paulo Pearson: Prentice Hall 2007

Espero que ajude... Afinal, só estudando a gente aprende...


Seja Livre! Use GNU/Linux!

Nenhum comentário:

Postar um comentário