Buy Viagra With Dapoxetine Online Cheap Levitra(Vardenafil) Without Prescription Buy Generic Cialis Online Buy Cheap Cialis Super Active Pharm Support Group Viagra Coupon Viagra Super Force Cialis Online without Prescription Buy Levitra Online.Vardenafil Cheap Cialis Buy Cheap Viagra Online Viagra with dapoxetine Super Viagra Viagra Online without Prescription Viagra Online Canadian Pharmacy Vardenafil Cialis Black Cialis Coupon Cialis Online Canada Quick Approval Payday loans faxless payday loans paydayavailable.info Cialis Online Canada
PrincipalOrkutDownloadsRegras

Login






Esqueceu sua senha?
Sem conta? Crie uma
Principal arrow Tutoriais arrow Tut Configuração arrow Analisando processos em seu GNU/Linux.
Analisando processos em seu GNU/Linux. PDF Imprimir E-mail
(2 votes)
Por Percival   
17 de julho de 2008
 
Analisando processos em seu GNU/Linux.



Muitas vezes é necessário que tomemos conhecimento sobre quais processos estão rodando em nosso Linux, seja para analisarmos algum em particular, ou termos uma visão geral do funcionamento do Sistema.
Um processo nada mais é do que um programa carregado na memória de seu PC; este pode ter sido iniciado pelo usuário, ou fazer parte da base necessária para que o Sistema se mantenha funcionando.

Esta é uma das tarefas mais importantes para um administrador, pois é importantíssimo saber o que realmente está acontecendo em determinado momento com o Sistema.

Existem alguns comandos que poderão lhe ajudar a fazer isto com certa facilidade.

Neste tutorial básico, tentarei demonstrar ao administrador iniciante alguns comandos e suas utilidades, bem como fazer um rápido apanhado sobre o assunto "processos".

Como já dito, cada programa aberto em seu PC é denominado processo. A ferramenta de maior utilidade para avaliarmos os processos consiste em um comando denominado "ps".

O "ps" é um dos comandos mais complexos que existem e o que cada administrador costuma fazer é determinar um conjunto de parâmetros prediletos e usá-los habitualmente. Esta complexidade deve-se à fusão das variantes derivadas do Unix, GNU e BSD, e como tal, pode ser usado no formato desejado dentro destas 3 "famílias". Os parâmetros Unix são precedidos por um "-"; os GNU por um "--" e os BSD são comandados diretamente ao terminal.

Vejamos o comando ( no exemplos que verão a seguir eu posso ter excluído algumas linhas da saída dos comandos a fim de economizar espaço e poupar sua paciência ):


percival@sodoma:~$ ps
  PID TTY          TIME CMD
11410 pts/0    00:00:00 bash
11431 pts/0    00:00:00 ps




O comando "ps" executado sem parâmetros não monstra nada de especial, além do PID ( Process IDentification ) e processos do usuário definido pelo $ no terminal ATUAL. No caso, o "ps" que acabei de executar e o shell em si. A terceira coluna nos informa quanto tempo de CPU foi usado para rodar o processo.

Vamos incrementar um pouco isto. Uma melhor análise dos processos pode ser obtida com o comando:

percival@sodoma:~$ ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [2]
    2 ?        SN     0:00 [ksoftirqd/0]
    3 ?        S<     0:00 [events/0]
    4 ?        S<     0:00 [khelper]
    5 ?        S<     0:00 [kthread]
    8 ?        S<     0:00 [kblockd/0]
    9 ?        S<     0:00 [kacpid]
  158 ?        S<     0:00 [kseriod]
  200 ?        S      0:00 [pdflush]
  201 ?        S      0:00 [pdflush]
  202 ?        S<     0:00 [kswapd0]
  203 ?        S<     0:00 [aio/0]
  678 ?        S<     0:00 [khubd]
  744 ?        S<     0:00 [ata/0]
  746 ?        S<     0:00 [ata_aux]
  760 ?        S<     0:00 [scsi_eh_0]
  761 ?        S<     0:00 [scsi_eh_1]
 1031 ?        S<     0:00 [reiserfs/0]
 1211 ?        S<s    0:00 udevd --daemon
 1544 ?        S<     0:00 [kpsmoused]
 1875 ?        S<     0:00 [wrap_wq]
 1877 ?        S<     0:00 [ndis_wq]
 1959 ?        S<     0:00 [kmirrord]
 2383 ?        Ss     0:00 /sbin/portmap
 2634 ?        Ss     0:00 /sbin/syslogd
 2640 ?        Ss     0:00 /sbin/klogd -x
 2717 ?        Ss     0:00 /usr/bin/dbus-daemon --system
 2725 ?        Ss     0:02 /usr/sbin/hald
 2726 ?        S      0:00 hald-runner




A primeira coluna refere-se ao PID ( notem que o primeiro processo, que recebeu a PID 1, é o "init" ), a terceira coluna determina o status do processo, e a última o comando que originou o processo. Os processos que encontram-se grafados entre colchetes são aqueles varridos para a swap, por encontrarem-se inativos.

Isso tudo será explicado mais detalhadamente logo à frente.



ADENDO 1 - Gerenciamento de memória.

Antes de mais nada, farei um pequeno adendo ao uso da memória pelo kernel do Sistema.

Uma das tarefas primordiais do kernel é gerenciar o aproveitamento de memória do Sistema, seja ela física ou virtual. Esta memória virtual, conhecida como "swap", nada mais é que um espaço em seu HD.

O kernel frequentemente varre processos da memória física para a virtual, quando estes estão inativos, e os varre de volta à memória física quando são requisitados. Com isto, o kernel consegue utilizar mais memória do que apenas dispõe fisicamente.

Cada processo iniciado recebe uma "vaga" única na memória do Sistema ( dois processos distintos não podem usar a mesma vaga ). Cada agrupamento destas vagas é chamado de página. O kernel distribui cada página entre a memória virtual e a física, de acordo com sua necessidade. Por exemplo, se um processo não é utilizado por determinado período de tempo, o kernel varre o mesmo da memória física para a virtual, deixando a última livre para algum novo processo.

Quando o Sistema precisa de um processo que está em uma página da swap, ele precisa varrê-lo de volta, o que consome um pouco de tempo, tornando o processo mais lento.

E isso ocorre repetidas vezes enquanto o Linux estiver de pé.






Voltando ao tema principal do artigo, vamos depurar um pouco mais a análise dos processos:


percival@sodoma:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:01 ?        00:00:00 init [2]
root         2     1  0 10:01 ?        00:00:00 [ksoftirqd/0]
root         3     1  0 10:01 ?        00:00:00 [events/0]
root         4     1  0 10:01 ?        00:00:00 [khelper]
root         5     1  0 10:01 ?        00:00:00 [kthread]
root         8     5  0 10:01 ?        00:00:00 [kblockd/0]
root         9     5  0 10:01 ?        00:00:00 [kacpid]
root       158     5  0 10:01 ?        00:00:00 [kseriod]
root       200     5  0 10:01 ?        00:00:00 [pdflush]
root       201     5  0 10:01 ?        00:00:00 [pdflush]
root       202     5  0 10:01 ?        00:00:00 [kswapd0]
root       203     5  0 10:01 ?        00:00:00 [aio/0]
root       678     5  0 10:01 ?        00:00:00 [khubd]
root       744     5  0 10:01 ?        00:00:00 [ata/0]
root       746     5  0 10:01 ?        00:00:00 [ata_aux]
root       760     5  0 10:01 ?        00:00:00 [scsi_eh_0]
root       761     5  0 10:01 ?        00:00:00 [scsi_eh_1]
root      1031     5  0 10:01 ?        00:00:00 [reiserfs/0]
root      1211     1  0 10:01 ?        00:00:00 udevd --daemon
root      1544     5  0 10:01 ?        00:00:00 [kpsmoused]
root      1875     5  0 10:01 ?        00:00:00 [wrap_wq]
root      1877     5  0 10:01 ?        00:00:00 [ndis_wq]
root      1959     5  0 10:01 ?        00:00:00 [kmirrord]
daemon    2383     1  0 10:02 ?        00:00:00 /sbin/portmap
root      2634     1  0 10:02 ?        00:00:00 /sbin/syslogd
root      2640     1  0 10:02 ?        00:00:00 /sbin/klogd -x
percival 11410 11408  0 12:36 pts/0    00:00:00 bash
percival 11735 11410  0 12:45 pts/0    00:00:00 ps -ef




Podemos combinar os parâmetros do modo como demonstrado no exemplo, a fim de termos no display as informações que necessitamos. O parâmetro "e" nos mostra TODOS os processos do Sistema, enquanto o "f" nos lista algumas informações pertinentes aos mesmos, delimitadas a seguir:

UID: o responsável por ter iniciado o processo
PID: o número de identificação do processo
PPID: o número de identificação do pai deste processo ( caso o processo tenha sido gerado por outro )
C: utilização de processamento sobre o tempo de vida do processo
STIME: horário em que o processo "nasceu"
TTY: o terminal do qual o processo foi lançado.
TIME: o tempo requerido para lançar o processo ( cumulativo )
CMD: o comando usado para iniciar o processo.


Notem que sempre o primeiro processo, consequentemente de PID "1", é o init ( já visto há pouco na saída do comando "ps ax"). Os PIDs são distribuídos em ordem numérica crescente a partir do momento de sua execução, não podendo haver dois valores iguais para processos.



ADENDO 2 - O init.

O init nada mais é do que um processo criado pelo kernel com a função de rodar os processos seguintes.

Os Sistemas GNU/Linux contém tabelas responsáveis pelo controle dos processos que deverão ser automaticamente carregados durante o boot, geralmente localizadas em /etc/inittabs. O processo init é direcionado a carregar determinados tipos de processos ( contidos no /etc/inittab ) de acordo com "runlevels". Existem diferentes "runlevels" no seu Sistema Linux, cada qual destinado a um propósito diferente e responsável pelo carregamento de processos necessários a este propósito.

Os runlevels, basicamente, são:

( 0 ): desliga o Sistema
( 1 ): somente o Sistema básico é carregado, e apenas um terminal aberto, só podendo ser acessado pelo root. Chama-se "single-user mode"
( 2 ): modo multi-usuário, com a rede ativada.
( 3 ): é o nível mais comumente usado, onde muitos processos específicos, como a REDE e a possibilidade do usuário logar-se em modo texto, são iniciados.
( 4 ): não utilizado.
( 5 ): é outro runlevel corriqueiramente usado, onde além dos serviços iniciados pelo 3, o ambiente em X também carregado, permitindo que usuários loguem-se ao Sistema graficamente.
( 6 ): reinicia o Sistema.






Se o administrador precisar de ainda mais informações do que as providas pelos parâmetros "ef", poderá lançar mão da seguinte:


percival@sodoma:~$ ps -efl
0 S percival 10893     1  0  75   0 -  8787 -      12:23 ?        00:00:09 gedit
0 S percival 11088     1  1  75   0 - 19630 stext  12:28 ?        00:00:19 evinc
0 R percival 11408     1  0  76   0 -  8609 stext  12:36 ?        00:00:00 gnome
0 S percival 11409 11408  0  79   0 -   620 -      12:36 ?        00:00:00 gnome
0 S percival 11410 11408  0  75   0 -  1375 wait   12:36 pts/0    00:00:00 bash
0 S percival 11989  3680  0  76   0 -  1259 pipe_w 12:51 ?        00:00:00 /usr/





A informação mais interessante neste caso está na segunda coluna, e define o STATUS do processo; sua saída deverá ser interpretada da seguinte maneira:

O- Rodando no processador
S- Dormindo
R- Pronto para rodar
Z- Zumbi ( processo foi terminado, e o pai deste processo não está mais presente )
T- Processo terminado.




Para definir uma árvore hierárquica na análise dos processos ( e saber quem é o processo-pai de determinado programa ), podemos usar o parâmetro "H". Veja um exemplo:

percival@sodoma:~$ ps -eH | grep compiz
  PID TTY          TIME CMD
 3705 ?        00:00:00   compiz-manager
 3794 ?        00:00:23     emerald
 3795 ?        00:00:00     compiz
 4010 ?        00:00:00       compiz
 4011 ?        00:03:19         compiz.real




Notem que o processo 3705 ( compiz-manager ) deu início aos processos 3794 e 3795. Este último solicitou o início do processo 4010, que por sua vez trouxe junto o 4011.


Vou fazer um pequeno resumo dos parâmetros mais utilizados para definir a saída do "ps", no estilo UNIX. Estes podem ser adicionados ao ps no shell depois de um "-". Muito mais parâmetros podem ser usados, e para tomar conhecimento destes, recorra ao manual do ps ( man ps ).

A ou e : mostra TODOS os processos.
T      : mostra todos os processo associados ao terminal atual.
e      : mostra todos os processos de todos os terminais.
x      : mostra os processos não controlados por um terminal.
f      : mostra uma listagem em formato completo
F      : mostra uma listagem mais completa ainda
H      : processos em ordem hierárquica


Usando o parâmetro "l", temos mais informações. Veja:


percival@sodoma:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  4080  4075  0  75   0 -  1374 wait   pts/0    00:00:00 bash
0 R  1000  5726  4080  0  76   0 -   806 -      pts/0    00:00:00 ps




F    = flags do Sistema, designadas para o processo pelo kernel.
PRI  = prioridade do processo.
NI   = este valor "NIce" é utilizado para se determinar as prioridades dos processos.
ADDR = endereço de memória ocupado pelo processo.
SZ   = espaço usado pelo processo, se foi varrido para a swap.
WCHAN= endereço da função do kernel onde o processo está "dormindo".


Tendo estas noções básicas em mente, fica fácil a partir de agora você monitorar os processos de seu GNU/Linux com o comando "ps". Mas, note que o "ps" nos mostra os processos ocorridos em determinado ponto no tempo. E se o administrador precisar de algo mais "dinâmico"?

Existe uma opção para esta tarefa: monitorar os processos em TEMPO REAL. Para isso, podemos utilizar o comando "top".

top


O "top" providencia uma análise dos processos a cada 3 segundos, diretamente no terminal, com informações úteis ao administrador.
Na primeira parte do output, vemos a hora atual seguida do uptime ( quanto tempo o Sistema está de pé ). Logo a seguir, está o número de usuários logados.
No final da primeira linha, veremos a média de carga do Sistema. São 3 números que nos dão a média de carga de trabalho no último minuto, nos últimos 5 minutos e por fim, no últimos 15 minutos. Quanto maior este número, mais o computador trabalhou.

Esta média de carga ( em inglês, "load average" ) pode nos indicar algum problema no Sistema. Se o valor correspondente à carga dos últimos 15 minutos estiver alto ( 2, por exemplo ), melhor checar o que pode estar ocorrendo e que processo está ocasionando isto.

Na segunda linha, nada de mais. "Tasks" indica quantos processos estão acontecendo em seu Sistema naquele momento, e depois o número de processos em cada estado ( já explicado anteriormente ).

Na terceira linha temos o display sobre o uso da CPU.

Na quarta e quinta linhas, informações sobre o gerenciamento de memória. Na primeira: memória física total, usada pelo Sistema, livre; o mesmo se repete na linha de baixo, só que em relação à memória virtual ( swap ).

Comandos interativos básicos para uso com o "top". Tecle o comando enquanto o "top" estiver correndo no terminal para funções extras:

1 - alterna entre o modo single-CPU e SMP ( symmetric multi-processor ).
z - troca a cor do display.
k - abre entrada para matar determinado processo.
d - muda o intervalo de atualização.
q - sai do "top".

Mais comandos em "man top".



ADENDO 3 - Matando processos

Podemos encerrar processos diretamente do terminal, bastando para isto conhecer um pouco do comando "kill".

O "kill" envia um sinal a determinado processo. Este sinal pode ser:

( 1 )  - aguarde.
( 2 )  - interrompa.
( 9 )  - morra.
( 17 ) - pare o que está fazendo, mas não termine.

O que dificulta um pouco o uso do comando para o administrador iniciante é que o "kill" não aceita que se dê o nome do comando que originou o processo ( CMD ) para matá-lo. Para isso precisaremos usar o PID, que você já sabe como obter se leu a primeira parte do artigo.

Além disto, um usuário normal não pode terminar um processo iniciado por outro usuário, só podendo interferir nos processos que ele mesmo ininciou. Ao root, obviamente, é permitida esta função.

Resumindo, pode-se pedir educadamente que um processo pare usando:

kill -2 processo

Ou partir para a ignorância contra processos rebeldes ( 8^P ) comandando:

kill -9 processorebelde


Mais informações em "man kill".






Considerações finais.


Espero ter ajudado os iniciantes em GNU/Linux a entenderem como é importante sabermos tomar conta do nosso Sistema, mesmo que este esteja em um simples PC dedicado a Desktop.

E o único modo de aprendermos é estudando, lendo e testando. Aperfeiçoem-se cada dia mais.

Não se pode ficar bitolado apenas em front-ends que rodam no X. Eu posso, obviamente, matar um processo usado o gnome-system-monitor, por exemplo. Mas, se um processo lazarento tiver saído da linha e estiver carregando tanto o Sistema a ponto de deixá-lo muito pesado, eu vou sofrer até conseguir me ver livre dele desta forma. No terminal, é praticamente imediato o resultado.

Saber se virar em um terminal SEMPRE é bom e SEMPRE é necessário. Você se acostuma rápido e as tarefas tornam-se mais rápidas e precisas.

Leiam o Guia FOCA. Leiam as páginas de manuais ( man man ). Leiam os artigos que os colegas predispõem-se a redigir.


Bom estudo a todos.



     Percival.

debian

Comentários
Pesquisar
Somente usuários registrados podem escrever comentários!

3.21 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."





Reddit!Del.icio.us!Google!Yahoo!
 
< Anterior   Próximo >