Sunteți pe pagina 1din 8

Helton Lira

Introduo
O gerenciamento de processos um trabalho fundamental para o administrador de sistemas. Em muitos casos os processos so ativados, executados e mortos sem a interveno de um usurio. Isto ocorre por que eles esto sendo automaticamente gerenciados pelo kernel. s vezes, um processo, por algum motivo desconhecido reestartado ou em outros casos, alguns processos acabam consumindo muito os recursos do sistema, requerendo que estes sejam terminados. Podemos aumentar a performance das operaes, instruindo os processos a executarem quando necessrio.

Processos
Processo um programa rodando no nosso sistema, tambm considerado um processo do kernel. Seu shell um processo. As caractersticas e conceitos associados com processos incluem:

Lifetime - o tempo de vida de um processo em execuo. PID - a identidade de um processo representado por um nmero inteiro e nico. UID - um processo associado com um usurio que inicia um processo. Parent Process - O primeiro processo startado no kernel do sistema o init. Este processo tem o
PID 1 e o ltimo parente de todos os outros processos no sistema. Seu shell descendente do init e o processo parente para os comandos o shell, onde esses so processos filhos ou subprocessos.

Parent Process ID - Este o PID do processo parente, ou seja, o PID do processo que criou o
processo em questo.

Enviroment - Cada processo tem suporte a uma lista de variveis associados a valores. Current Working Directory - um diretrio default associado com cada processo.

Monitorando processos com ps, pstree e top ps


O comando ps mostra os processos que esto sendo executados no sistema. Vejamos algumas opes:

a - Mostra todos os processos criados. x - Mostra os processos que no so controlados pelo terminal. u - Mostra o nome do usurio e a hora que o processo foi iniciado. --help - Mostra a ajuda do comando ps (utilize tambm man ps)

# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.4 1320 528 ? S 11:34 0:04 init root 2 0.0 0.0 0 0 ? SW 11:34 0:00 [keventd] root 3 0.0 0.0 0 0 ? SW 11:34 0:00 [kapmd] root 4 0.0 0.0 0 0 ? SWN 11:34 0:00 [ksoftirqd_CPU0] root 5 0.0 0.0 0 0 ? SW 11:34 0:00 [kswapd] root 6 0.0 0.0 0 0 ? SW 11:34 0:00 [bdflush] root 7 0.0 0.0 0 0 ? SW 11:34 0:00 [kupdated] root 8 0.0 0.0 0 0 ? SW< 11:34 0:00 [mdrecoveryd] root 12 0.0 0.0 0 0 ? SW 11:34 0:00 [kjournald] bin 647 0.0 0.3 1412 448 ? S 11:35 0:00 portmap root 667 0.0 0.5 1384 608 ? S 11:35 0:00 syslogd -m 0 root 679 0.0 0.9 1916 1124 ? S 11:35 0:00 klogd daemo 767 0.0 0.4 1368 564 ? S 11:35 0:00 /usr/sbin/atd

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
root 787 0.0 0.5 1552 696 ? S 11:35 0:00 crond A sada do comando ps uma tabela onde cada coluna fornece uma informao: USER - Nome do usurio dono do processo. UID - Nmero de identificao do usurio dono do processo. PID - Nmero de identificao do processo. PPID - Nmero de identificao do processo pai de cada tarefa. PRI - Nmero de prioridade da tarefa. (Nmeros altos so prioridades baixas). NI - Valor preciso da prioridade da tarefa. %CPU - O consumo de processamento do processo. %MEM - O consumo de memria do processo. SIZE - Tamanho do cdigo da tarefa em kilobytes. RSS - Soma total da memria fsica usada pelo processo, em kilobytes. WCHAN - Endereo ou nome da funo do kernel da tarefa que est atualmente suspensa. STAT - Estado do processo: S - Suspenso, R - em Execuo, T - Interrompido, Z - Terminado, etc. TTY - Terminal onde so executados os processos. TIME - Tempo total da CPU usado pelo processo desde que foi iniciado. COMMAND - Nome do comando do processo.

Suponhamos que eu no quero listar todos os processos, apenas quero saber informaes de um processo especfico. Veja o exemplo: # ps aux | grep cron root 347 0.0 0.3 1652 680 ? S 09:00 0:00 /usr/sbin/cron Note que listamos apenas as informaes do processo usado pelo cron. Essa concatenao de comandos bem til, pois facilita a gerncia dos processos.

pstree

O comando pstree usado para visualizar a rvore de processos. # pstree

init-+-alarmd |-apache---5*[apache] |-atd |-cron |-6*[getty] |-i2oevtd |-inetd

top

O comando top usado como um monitor do sistema que mostra a atividade do processador em tempo real. Exibindo as tarefas que esto sendo executadas na CPU e fornecendo uma interface amigvel para o gerenciamento de processos. # top 10:10:45 up 1:13, 1 user, load average: 0.10, 0.22, 0.23 86 processes: 85 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.9% user, 1.9% system, 0.0% nice, 96.2% idle Mem: 182408K total, 177064K used, 5344K free, 45564K buffers Swap: 96764K total, 7368K used, 89396K free, 36228K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 10533 root 19 0 980 980 760 R 2.5 0.5 0:01 top 628 root 10 0 7888 7428 6492 S 0.6 4.0 0:02 kdeinit 375 root 6 -10 40284 31M 3464 S < 0.3 17.4 1:49 XFree86 1 root 9 0 476 436 416 S 0.0 0.2 0:03 init 2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd 3 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0 4 root 9 0 0 0 0 SW 0.0 0.0 0:04 kswapd 5 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflush 6 root 9 0 0 0 0 SW 0.0 0.0 0:00 kupdated 7 root 9 0 0 0 0 SW 0.0 0.0 0:00 i2oevtd

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
Veja algumas opes teis do top:

-d [tempo] - Atualiza a tela aps o tempo especificado. -s - Executa o top em modo seguro -i - Executa o top ignorando processos zumbis. -c - Mostra a linha de comando ao invs do nome do programa.

Para obter mais ajuda, leia a man page do top (man top). Podemos utilizar opes dentro do programa, em tempo real, enquanto ele est sendo executado:

h - Lista os comandos que podem ser usados no top. espao - Atualiza imediatamente a tela. i - Ignora processos ociosos. k - Mata um processo. N - Classifica os processos por nmero de PID. A - Classifica os processos por perodo. P - Classifica os processos por uso de CPU. M - Classifica os processos por uso de memria. T - Classifica os processos por tempo. u - Mostra os processos de um usurio especfico. n ou # - Lista um nmero de processos. s - Especfica o tempo em segundos para a atualizao da tela. W - Cria um arquivo de configurao do top (~/.toprc). r - Aplica um renice no processo.

Terminando processos com kill e killall kill


Pelo nome pode-se pensar que o comando kill mata aplicaes. Porm, seu objetivo na verdade enviar sinais para os processos. H vrios sinais diferentes que o kill pode enviar para um processo. Veja a lista de todos os sinais conhecidos: # kill -l

q - Sai do top.

1) SIGHUP SIGQUIT 4) 5) SIGTRAP SIGBUS 8) 9) SIGKILL SIGSEGV 12) 13) SIGPIPE SIGTERM 17) 18) SIGCONT SIGTSTP 21) 22) SIGTTOU SIGXCPU 25) 26) SIGVTALRM SIGWINCH 29)

2) SIGINT SIGILL 6) SIGABRT SIGFPE 10) SIGUSR1 SIGUSR2 14) SIGALRM SIGCHLD 19) SIGSTOP SIGTTIN 23) SIGURG SIGXFSZ 27) SIGPROF SIGIO

3) 7) 11) 15) 20) 24) 28)

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
30) SIGPWR SIGRTMIN 33) 34) SIGRTMIN+2 SIGRTMIN+4 37) 38) SIGRTMIN+6 SIGRTMIN+8 41) 42) SIGRTMIN+10 SIGRTMIN+12 45) 46) SIGRTMIN+14 SIGRTMAX-15 49) 50) SIGRTMAX-13 SIGRTMAX-11 53) 54) SIGRTMAX-9 SIGRTMAX-7 57) 58) SIGRTMAX-5 SIGRTMAX-3 61) 62) SIGRTMAX-1 31) SIGSYS SIGRTMIN+1 35) SIGRTMIN+3 SIGRTMIN+5 39) SIGRTMIN+7 SIGRTMIN+9 43) SIGRTMIN+11 SIGRTMIN+13 47) SIGRTMIN+15 SIGRTMAX-14 51) SIGRTMAX-12 SIGRTMAX-10 55) SIGRTMAX-8 SIGRTMAX-6 59) SIGRTMAX-4 SIGRTMAX-2 63) SIGRTMAX 32) 36) 40) 44) 48) 52) 56) 60)

Podemos saber qual a funo de cada sinal consultando a man page signal. # man 7 signal Vamos finalizar o processo correspondente ao agendador de tarefas cron. Primeiro, vamos visualizar o PID do processo: # pgrep cron 347 Lembre-se que para visualizar o PID de um processo voc pode utilizar o comando ps, top e jobs. No exemplo foi usado o comando pgrep, que usado para saber o PID de um processo baseado no nome ou atributo. Agora que temos o numero PID do processo vamos finaliz-lo: # kill -9 347 Agora vamos apenas parar a execuo de um processo: # pgrep inetd 13002 # kill -19 13002 # ps lax | grep inetd 140 0 13002 1 9 0 1996 708 signal T ? 0:00 /usr/sbin/inetd Veja que o processo correspondente ao inet foi interrompido. Agora vamos coloc-lo em execuo: # kill -18 13002 # ps lax | grep inetd 140 0 13002 1 9 0 1996 708 select S ? 0:00 /usr/sbin/inetd Somente o superusurio pode enviar sinais a processos de outros usurios.

killall
O killall um comando que finaliza processos atravs do nome. # ps aux | grep vi root 13349 0.1 1.0 3016 1856 tty1 S 13:14 0:00 vi root 13351 0.1 1.0 3016 1856 tty2 S 13:14 0:00 vi

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
Observe que o vi est ativo na tty1 e tty2 e que existe um nmero de processo para cada um. Vamos encerr-los de uma vez s: # killall -9 vi Para verificar se o vi foi finalizado, podemos receber uma confirmao do sinal usando a opo -v: # killall -v -9 vi Killed vi(13349) with signal 9 Killed vi(13551) with signal 9

Controlando tarefas com bg, fg e jobs bg


O comando bg permite que um programa rodando em primeiro plano ou parado, rode em segundo plano (background), liberando o shell para outras atividades. Existem 3 maneiras diferentes de colocar um programa em background, veja os exemplos: Inicie o vi e depois pressione as teclas Ctrl+Z, o vi interrompido e colocado em segundo plano. # vi

[1]+

Stopped

vi

Agora faa o seguinte: # top & [2] 1130 O caracter "&" colocou o top para ser executado em segundo plano, vamos ao ltimo exemplo: Vamos executar a man page do comando du: # man du Agora interrompa a sua execuo pressionando as teclas Ctrl+Z: # man du

[3]+

Stopped

man du

Agora use o comando bg da seguinte maneira: # bg 3 bg 3 [3]+ man du & Mas por que colocar os processos em segundo plano? Imagine que voc esteja consultando uma man page de um determinado comando e deseja utilizar uma de suas opes, muitos sairiam da man page ou abririam outro terminal, felizmente no precisamos fazer isso, usando as opes para colocar as tarefas em segundo plano faremos tudo no mesmo terminal. Ou seja, o Linux lhe oferece a oportunidade de executar outros processos sem que voc tenha de parar o que estava fazendo. O processo foi colocado em background, agora vamos visualizar estes processos para colocarmos eles para rodarem em primeiro plano.

jobs

O comando jobs mostra os processos que esto parados ou rodando em segundo plano.

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
Vamos listar os processos que esto em segundo plano: # jobs -l

[1] [2][3]+

1129 Parado 1130 Parado (sada tty) 1192 Parado (sada tty)

vi top man du

Observe a sada do comando, foram listados os nmeros dos processos, os PIDs e o estdos dos processos. Agora com essa informao vamos colocar os processos em segundo plano para rodar em primeiro plano.

fg

O comando fg permite que um programa rodando ou parado em segundo plano rode em primeiro plano. Podemos colocar os programas que esto sendo executados em segundo plano para rodar em primeiro usando o nome do programa que queremos rodar ou o nmero da tarefa que ele representa no comando jobs. Neste exemplo vamos startar o vi, o seu nmero de tarefa 1, veja os exemplos: # fg vi ou # fg 1 Observe que o vi agora est rodando em primeiro plano ou em foreground, podemos fazer isso com todos os outros processos que esto em segundo plano ou background.

Modificando as prioridades de execuo dos processos


s vezes, algumas tarefas requerem mais tempo de execuo do que outras. Por esta razo cada processo possui uma prioridade de execuo. As prioridades dos processos podem ser determinadas examinando a coluna PRI do programa top ou do comando "ps -l".

nice

O comando nice atribui um nmero de prioridade para um processo. Por default os processos de usurios so criados com prioridade 0. Ns podemos definir as prioridades oscilando entre +19 e -19, os nmeros positivos indicam processos de baixa prioridade e os nmeros negativos indicam processos de alta prioridade.

nice -n [nmero da prioridade] [comando/programa]


Vamos inicializar o vi com um nvel de prioridade baixa, veja o exemplo: # nice -n 19 vi # ps -lax | grep vi 000 0 1072 1014 19 19 8504 3560 do_sel SN pts/1 0:00 vi Observe que a prioridade de processamento do vi agora baixa, podemos utilizar o top para verificar a prioridade, veja o exemplo: # top -d3 (Quando o programa iniciar pressione "T") 5:21pm up 1:09, 4 users, load average: 0,47, 0,32, 0,36 49 processes: 48 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 4,1% user, 2,2% system, 0,0% nice, 93,5% idle Mem: 118964K av, 115336K used, 3628K free, 0K shrd, 42304K buff 50480K actv, 0K in_d, 0K in_c, 0K target Swap: 100760K av, 22100K used, 78660K free 22012K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira
1087 root 18 0 1060 1060 848 R 3,5 0,8 0:00 top 1072 root 19 19 3560 3560 2584 S N 0,0 2,9 0:00 vi 679 root 9 0 1124 1120 452 S 0,0 0,9 0:00 klogd

renice O renice um comando que altera a prioridade de um processo em execuo. renice [nmero da prioridade] [opo] processo
Podemos usar as seguintes opes:

-g - Faz com que o parmetro seguinte seja interpretado como um IDs de grupos de processos. -u - Faz com que o parmetro seguinte seja interpretado como um nome de usurio. -p - Faz com que o parmetro seguinte seja interpretado como um ID de processo.

Agora vamos mudar a prioridade do vi para -19, com o processo em execuo. Primeiro precisamos saber o nmero do processo, para isso podemos usar o comando pgrep, veja o exemplo: # pgrep vi 1072 # renice -19 -p 1072 1072: prioridade antiga = 19; prioridade nova = -19 Agora que mudamos a prioridade de execuo vamos verific-la: # ps -lax | grep vi 000 0 1072 1014 1 -19 8504 3560 do_sel S< pts/1 0:00 vi Observe agora que a prioridade do vi agora alta.

nohup

O nohup um comando que faz com que os processos ignorem o sinal hangup (sinal 1 - interrupo). Vamos executar um processo que no poder ser finalizado, veja o exemplo: # nohup vi nohup: appending output to `nohup.out' # killall -1 vi # ps -aux | grep vi root 988 0.6 11.0 22120 13152 ? S 08:27 0:06 kghostview /mnt/w root 1001 14.3 3.0 8500 3572 pts/3 RN 08:38 0:50 vi root 1026 0.0 0.5 1724 668 pts/4 S 08:44 0:00 grep vi Observe que o processo no foi finalizado, ento agora vamos finaliz-lo: # killall -9 vi # ps -aux | grep vi root 988 0.5 11.0 22120 13152 ? S 08:27 0:06 kghostview /mnt/w root 1029 0.0 0.5 1724 668 pts/4 S 08:45 0:00 grep vi Observe que o processo 1001 que representava o vi foi finalizado. Aqui terminamos o artigo sobre processos, espero que este artigo lhe ajude no dia a dia. At mais...

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3

Helton Lira

http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminandoprocessos?pagina=3