domingo, 27 de junho de 2010

Gerenciamento de Processos GNU/Linux

É importante que se diga que este thread é apenas um esboço da complexidade que é o gerenciamento de processos em Sistemas GNU/Linux; a fim de diminuir o tamanho do post negligenciei algumas opções de comando e comandos propriamente. Portanto, para um correto entendimento sobre gerenciamento de processos deve-se recorrer a outras fontes também. Uma boa dica são os livros citados como referência no final do thread.


Criar; Monitorar e Gerenciar Processos


“Processo é um programa em execução. Mais especificamente do ponto de vista do Sistema Operacional, é a estrutura responsável pela manutenção de todas as informações necessárias à execução de um progrma” (FERREIRA, 2009, p. 257);

Para Sistemas GNU/Linux, todo tipo de programa, comando, aplicativo que esteja executando é tratado como um processo. Na maioria das vezes, os processos são criados e eliminados automaticamente (mortos) já que estão sob supervisão e responsabilidade do kernel; mas existem algumas situações em que o sysadmin deverá intervir manualmente para “matar” algum processo que por algum motivo esteja se comportando mal, “rebelado ou revoltado”, travando ou não respondendo. Pode haver a necessidade de parar algum processo que esteja consumindo muitos recursos do equipamento ou simplesmente reinicializar o processo com uma prioridade maior ou menor de execução.


Processos em Sistema GNU/Linux possuem alguns atributos, a saber:


  • Tempo de vida – define o tempo que este processo ficou em execução, existe processos com tempo de vida curto, outros processos com tempo de vida mais longo. Existem processos que executam desde quando o computador é ligado até que seja desligado, estes processos são os daemons servidores; daemons geralmente executam em modo background e ficam aguradando que algum outro processo solicite seus serviços.

  • ID do processo (PID) – todo processo possui um PID que o identifica (pid é um número inteiro que identifica cada processo em execução, sem possibilidade de serem iguais entre os processos em execução; cada processo tem um número único de identificação);

  • ID do user (UID) e ID do grupo (GID) – Esses atributos identificam o usuário que iniciou o processo e o grupo que o usuário pertence; geralmente o significado disso se presta para verificação de permissão, já que o usuário comum é limitado ao acesso aos objetos do sistema de arquivos;

  • Processos parentes – os processos são parentes entre si (processos pai, processos filhos) o init é o primeiro processo a ser executado pelo sistema, os próximos processos são processos descendentes do init.

Monitoração de Processos


Em um sistema GNU/Linux, existem centenas de processos executando simultaneamente e concorrendo entre si pelo uso dos recursos de CPU e memória. Os processos são controlados por escalonadores do Sistema Operacional, que, de acordo com o grau de prioridade de cada processo definem qual é a parcela de tempo de processamento que cada processo deverá ocupar.

Os comandos que nos permitem monitorar os processos em execução são os comandos ps, pstree e top;


ps


O comando ps exibe uma lista dos processos em execução, também nos mostra qual user executou o processo, pid do processo, tempo de execução, hora de inicialização, etc, etc;


Sintaxe

# ps [opções]


As principais opções são:

a - Mostra os processos criados por você e de outros usuários do sistema.

x - Mostra processos que não são controlados pelo terminal.

u - Mostra o nome de usuário que iniciou o processo e hora em que o processo foi iniciado.

Para uma averiguação mais detalhada é necessário utilizar uma combinação de opções. Exemplo:

# ps -ef → este é uma combinação muito importante para mostrar processos ativos, mostra o dono do processo, o pid, o time de execução do processo, em qual TTY esta sendo executando o processo e mais algumas informações úteis para o sysadmin;

# ps -l → mostra o comando no formato longo;

# ps -aux → também é um combinação de opções bastante interessante;

maiores informações: # man ps


pstree


O comando pstree exibe uma lista dos processos em um formato de “arvore”, ficando fácil de perceber quem são os processos “pai” e quem são os processos “filhos”; (Sistemas linux trabalham com conceitos de herança, assim quando um processo é criado a partir de outro processo já executando no sistema, dizemos que este é “processo filho”; quem criou o processo é o “processo pai”)


Sintaxe

# pstree [opções][pid/usuario]


-a → exibe argumentos de linha de comando usada para iniciar processos;

-c → desabilita compactação de sub-arvore;

-h → destaca os ancestrais do processo atual;

-p → inclui os pids na saída;

-u [user] → mostra os processos executados pelo usuário setado;


Um bom exemplo:

Vejam a saída do comando no meu prompt.

debian:/home/jorge# pstree -up jorge

bonobo-activati(2937)───{bonobo-activati}(2941)


chrome(3015)─┬─chrome(3018)

├─{chrome}(3023)

├─{chrome}(3024)

├─{chrome}(3028)

├─{chrome}(3029)

├─{chrome}(3030)

├─{chrome}(3031)

├─{chrome}(3033)

├─{chrome}(3034)

├─{chrome}(3041)

├─{chrome}(5622)

├─{chrome}(5674)

├─{chrome}(5677)

└─{chrome}(5678)


chrome(3020)─┬─chrome(3036)───{chrome}(3038)

├─chrome(3112)───{chrome}(3114)

└─chrome(5666)───{chrome}(5668)


dbus-daemon(2900)


dbus-launch(2899)


gconfd-2(2902)


x-session-manag(2848)─┬─bluetooth-apple(2940)

├─gnome-panel(2935)

├─gnome-settings-(2913)───{gnome-settings-}(2920)

├─kerneloops-appl(2947)

├─metacity(2932)

├─nautilus(2933)

├─nm-applet(2948)

├─seahorse-agent(2908)

├─ssh-agent(2896)

├─system-config-p(2943)

├─update-notifier(2938)

└─{x-session-manag}(2918)


Com o comando pstree combinando as opções -up mostra todos os processos executados pelo usuário jorge, seu grau de parentesco e os pids correspondentes de cada processo.

maiores informações: # man pstree


top


Mostra os programas em execução ativos, parados, tempo usado na CPU, detalhes sobre o uso da memória RAM, Swap, disponibilidade para execução de programas no sistema, etc. Tem uma saída semelhante ao comando ps, com exibição continuamente atualizado na tela ou conforme definição do sysadmin. Isto é bastante útil quando existe a necessidade de monitorar frequentemente o uso de recurso ou o comportamento de algum processo em execução. Na execução deste comando, também é exibido um cabeçalho com informações úteis sobre a duração de execução, carga e status da CPU, uso de memória. Os processos que utilizam mais recursos são mostrados por primeiro, ou no topo da tela.


Sintaxe

top [opções]


Algumas opções do comando top:

-d → deine o tempo de atualização da tela. Se nenhum argumento for usado, o padrão é 5s;

-i → ignora processos ociosos (processos zumbis) e exibe somente processos que estejam usando recursos do sistema;

-n →exibe um número de iterações e depois finaliza, ao invéz de executar o top indefinidamente;

-u [user]→exibe somente processos pertencentes ao usuário setado;


Abaixo algumas teclas uteis depois que o comando top já está em execução.


espaço - Atualiza imediatamente a tela.

CTRL+L - Apaga e atualiza a tela.

h - Mostra a tela de ajuda do programa. É mostrado todas as teclas que podem ser usadas com o top.

i - Ignora o tempo ocioso de processos zumbis.

q - Sai do programa.

k - Finaliza um processo - semelhante ao comando kill. Você será perguntado pelo número de identificação do processo (PID). Este comando não estará disponível caso esteja usando o top com a opção -s.

-r → esta opção é muito importante para o comando top, pois possibilita a mudança de prioridade de um processo. Ao digitar r o prompt pede o número do processo e em seguida a sua prioridade que vai de -20 até +19; lembrando que as prioridade entre processos são inversamente proporcionais, ou seja -20 é a prioridade máxima de um processo, +19 é a prioridade mínima de um processo;

n - Muda o número de linhas mostradas na tela. Se 0 for especificado, será usada toda a tela para listagem de processos.

u - Permite especificar um único usuário ao qual se queira monitorar os processos. Monitora processos por usuário.


Eliminando Processos no sistema;


Kill


O comando kill envia um sinal de término para o processo em execução. É importante lembrar que para finalizar um processo é preciso ser o dono dele ou então ser o user root; também é necessário saber que, ao finalizar um processo, finalizamos todos os seus sub-processos. ( em outras palavras, "ao matar o processo pai, matamos também todos os processos filhos descendentes"). O comando kill finaliza um processo pelo seu pid;


Sintaxe

kill [opções] [sinal] [pid]


# kill 3245 → envia um solicitação de fechamento do processo 3245; se omitido o signum o sistema assume o valor 15 para encerramento do processo;

# kill -15 3245 → solicita ao processo terminar o que esta fazendo e finalizar o processo de pid 3245;

# kill -9 3245 → fechar o processo de pid 3245 imediatamente; este comando deverá ser usado para finalizar processos travados que não obedecem o comando kill 15 pid; é uma medida drástica e deve ser utilizado com cuidado.

Um processo de terminal rodando em foreground (primeiro plano) também poderá ser eliminado pressionando as teclas CTRL+C.

CTRL+X aborta um processo emexecução

Para parar momentaneamente a execução de um processo sem cancelar sua execução usa-se o CTRL+Z; O programa permanece na memória no ponto de processamento em que parou quando ele é interrompido, podendo ser ativado novamente em um momento oportuno; ao contrário do CTRL+C e CTRL+X que abortam o processo.


Killall


Este comando permite finalizar processo utilizando o seu nome ao invés do pid.


Sintaxe

killall [opções] [sinal] [processo]


As opções mais importantes são:

-i Pede confirmação sobre a finalização do processo.

-l Lista o nome de todos os sinais conhecidos.

-q Ignora a existência do processo.

-v Retorna se o sinal foi enviado com sucesso ao processo.

-w Finaliza a execução do killall somente após finalizar todos os processos.

Exemplo:

$ killall audacious;


Controle de Processos via terminal


Processos (programas) podem ser executados de duas maneiras: em primeiro plano (foreground) ou em segundo plano (background). O controle de processo é um recurso muito útil que permitem interromper e retomar a execução de processos, bem como coloca-los em segundo plano (background) e voltar para primeiro plano (foreground), conforme conviniência ou necessidade.

A principal vantagem em colocar um processo rodando em segundo plano é o fato que este não ocupa o prompt de comando, deixando-o livre para outras atividades. Podemos executar um processo em modo backgroun da seguinte maneira:

$ audacious &

- utilizando-se o símbolo & no final do comando o processo/programa fica rodando em segundo plano liberando o terminal para outras atividades. O prompt, neste caso, me retornou [1] 7182 que seria:

[1] numero de tarefa;

7182 que equivale ao pid do processo.

É possível mesmo depois de ter inicializado um processo em modo foreground coloca-lo em modo background, para isso é necessário parar o processo em execução com o comando CTRL + Z, que deverá aparecer dessa maneira no terminal:

^Z

[1]+ Stopped audacious

em seguida emitir o comando bg 1 para inicializar o processo em background.


jobs


O comando jobs mostra os processos que estão parados ou rodando em segundo plano

$ jobs → este comando mostra quais processos estão rodando em modo background;

$ jobs -l → mostra o nome dos processos que estão rodando em modo background; e seus respectivos pids;

$ jobs -s → exibe o nome de cada processo em background;

$ jobs -p → exibe o pid de cada processo em background;


fg


Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano. Antes deve-se usar o comando jobs para ver o número do processo rodando em segundo plano ou interrompida, este número será passado ao comando fg para ativa-lo em primeiro plano.

fg [número] Onde número é o número obtido através do comando jobs.

Caso seja usado sem parâmetros, o fg utilizará o último programa interrompido (o maior número obtido com o comando jobs).


bg


Possibilita fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano. Para fazer um programa que esta executando em primeiro plano rodar em segundo, é necessário primeiro interromper a execução do comando com CTRL+ Z, será mostrado o número da tarefa interrompida, use este número com o comando bg para iniciar a execução do comando em segundo plano.

bg [número] Onde: número do programa obtido com o pressionamento das teclas CTRL+Z ou através do comando jobs.


Prioridade entre processos em execução


Em sistemas GNU/Linux existe um recurso que possibilita ao administrador priorizar a execução de alguns processos em relação a outros de acordo com suas necessidades.


nice


Serve para configurar a prioridade da execução de um comando/programa na inicialização do processo. Para saber a prioridade de algum processo em execução deve-se analisar a coluna PR nos resultados produzidos pelo comando top ou ps -l. Na pratica, quanto mais alto a prioridade de um processo mais tempo de CPU o kernel aloca para este processo; a prioridade de um processo vai de -20 até +19, sendo inversamente proporcional, ou seja, quanto menor o número nice, maior será sua prioridade; por padrão os processos quando são criados, são criados com prioridade 0 (zero). Qualquer usuário pode criar processos com prioridade maior que zero, mas somente o user root poderá criar processos com nice negativos; ou seja, prioridades mais altas do que o padrão.



Sintaxe

nice [n ajuste] [comando]



# nice -n -10 firefox; → inicializa o processo firefox com prioridade de execução -10 (somente o root poderá inicializar este processo com esta prioridade);


Modificando prioridades de processos em execução


renice


Quando um processo já se encontra em execução e se deseja modificar a sua prioridade, usa-se o comando renice;

Sintaxe

renice [+ | - ] numero_nice [opçoes] alvos

opções:

-u → interpreta alvos como um usuário por exemplo;

-p → interpreta alvos como um número pid;

$ renice 18 609 → altera a prioridade do processo 609 para 18;

# renice -10 -u jorge -p 709 → este comando só pode ser usado pelo root e altera a prioridade de todos os processos criados pelo user jorge para -10 e também o processo com o pid 709;


tload


Este comando representa de forma gráfica a carga do sistema.

sintaxe

tload [opções]

Algumas opções

-s [num] - Mostra uma escala vertical com espaçamento especificado por [número]. É recomendável o uso de números entre 1 e 10 para melhor visualização da escala.

-d [num] - Especifica o intervalo entre atualizações, em segundos.


Referências:

SIQUEIRA, Luciano Antonio. Certificação LPI-1: 101-102. São Paulo: Linux New Media, 2009.

PRITCHARD, Steven et al. Certificação Linux LPI: Guia de referência nível 1: Exames 101 e 102. Rio de Janeiro: Alta Books, 2007.

FERREIRA, Rubem E. LINUX: Guia do Administrador de Sistemas. São Paulo: Novatec, 2008.

Guia Foca Linux, 2010. Disponível em : http://focalinux.cipsga.org.br/ . Acesso em 26 de junho de 2010.


0 Comentários:

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial