www.4linux.com.br
-2
Sumrio
Processos .................................................................................................................................. 3 1.1. Objetivo:.......................................................................................................................... 3 1.2. Introduo....................................................................................................................... 4 1.3. Background e foreground ............................................................................................ 10 1.4. Prioridades de processos.............................................................................................. 13 1.5. Comandos complementares de processos.....................................................................15
1.5.1. Comando fuser..................................................................................................................... 15 1.5.2. Comando nohup................................................................................................................... 17
Processos - 3
Processos
1.1. Objetivo:
Entender como feito o gerenciamento de processos no Linux.
Processos - 4
1.2. Introduo
Antes de qualquer coisa necessrio ter claro o conceito correto de processo. Processo uma tarefa em execuo controlada pelo kernel ocupando uma rea na memria (RAM), no qual so Linux usa o mecanismo de identific-los por nmeros. Ou seja, tudo que estiver rodando no sistema ser um processo. o processo que utiliza os recursos de um computador, como memria e processamento. Um simples comando um processo, um browser aberto um processo. O shell que voc est usando um processo, seu terminal um processo. Quem controla os processos no sistema o Kernel, alis essa uma de suas tarefas. responsabilidade do Kernel gerenciar os processos tentando otimizar a performance da CPU Unidade Central de Processamento.
O GNU/Linux usa um mecanismo de identific-los por nmeros, ou seja, cada processo tem um nmero diferente de identificao que chamamos de PID. Dessa forma pode-se manipul-los e control-los. Controlar poder matar , reiniciar. Na prtica usa-se mais para matar um processo. Formas de visualizao de processos:
# ls /proc
Nesse diretrio, voc ver vrios arquivos com informaes gerais que o kernel nos fornece, por exemplo os arquivos: cpuinfo, ioports, meminfo, interrupts, mounts, swaps e muitos outros. Vale a pena ver o contedo desses arquivos para aprender mais sobre eles.
Processos - 5 No /proc, voc pode entrar em um nmero (diretrio) que identifica um processo e listar o contedo dele, exemplo:
Foi escolhido um nmero aqui aleatoriamente no sistema. Na seu sistema este nmero pode ser de outro processo e at mesmo no existir, portanto escolha um no seu /proc e explore. Dois arquivos interessantes de explorar nesses diretrios dos processos so:
cmdline status
# man proc
# ps aux | more
Explicando o comando:
#ps aux a = todos os processos u = de todos os usurios x = e at processos sem controle pelo terminal
Ou seja, todos os processos mesmo! Controlado ou no pelos terminais significa que so processos internos, que no foram gerados por um usurio que esteja usando um determinado terminal.
Processos - 6
melhor usar o comando ps do que entrar no /proc e entrar em diretrio por diretrio.
O PID nada mais do que Identificao do Processo. atravs do PID que posivel manipular um processo. Ou seja, matar caso ele esteja atrapalhando o sistema! O PID seria a segunda coluna do resultado do comando ps. Vamos analisar as colunas do comando ps.
# ps aux | more
USER - Usurio responsvel pelo processo. PID - Nmero que identifica o processo, no se repete! % CPU - Quanto de CPU ele usa! % MEM - Quanto de MEM ele usa! VSZ - Tamanho virtual do processo; RSS - Indica a quantidade de memria usada (em KB); TTY - Terminal que gerou o processo. ? - sem terminal STAT - Estado do processo, sendo representado por uma letra. R - executvel; D - em espera no disco; S - Suspenso; T - interrompido; Z - Zumbi. COMMAND - Nome do processo, ou seja, o comando em si.
Com a opo f em ps, possvel ver em forma de rvore, caso o processo tem processos filhos:
# ps faux | more
Processos - 7
Para monitorar a execuo dos processos vendo uma tabela que se atualiza de tempos em tempos:
# top
Esse comando gera uma tabela dinmica com informaes sobre os processos, possvel matar um processo daqui mesmo. Para maiores informaes sobre o comando top, digite o comando h (help) quando estiver nele, ou:
# man top
Para matar um processo, voc tem duas formas: Ou pelo PID (nmero do processo) ( 2 coluna) Ou pelo COMMAND (nome do processo) (ltima coluna)
Lembrando que voc precisa ser o dono do processo ou o usurio root para destrulo. Ento podemos visualiz-lo dessa maneira:
Processos - 8
# killall firefox
Onde: killall - comando para matar um processo pelo nome. Na prtica no comando kill apenas usamos o -9 e o -15 para matar um processo que esteja travado ou atrapalhando o bom funcionamento do sistema. Conhecendo os demais sinais:
# kill -l
Processos - 9
# man 7 signal
Alguns sinais mais usados: STOP - esse sinal tem a funo de interromper a execuo de um processo e s reativ-lo aps o recebimento do sinal CONT; CONT - esse sinal tem a funo de instruir a execuo de um processo aps este ter sido interrompido; TERM - esse sinal tem a funo de terminar completamente o processo, ou seja, este deixa de existir aps a finalizao; KILL - esse sinal tem a funo de "matar" um processo e usado em momentos de crticos. HUP - pode ser usado para que um servio leia novamente seu arquivo de configurao.
Na maioria das distribuies, o agendador de tarefas "cron" sempre vem startado quando a mquina iniciada. Mas neste caso, se no est sendo usado seu processo pode ser morto. Para localizar esse processo, usa-se um comando muito legal:
# pgrep firefox
# pidof firefox
# kill -15 PID Ou # kill -s SIGTERM 3222 Ou ainda: # pkill -15 firefox
Onde o comando para colocar em background apenas o & no final do comando em si.
Para ver o processo que est rodando em background:
#jobs
Onde o comando jobs ir mostrar o processo que est em background.
Processos - 11 Para colocar esse processo novamente para primeiro plano pegue o nmero que o jobs passou e digite:
#fg 1
Onde fg (foreground) traz o processo para primeiro plano. Porque este foi o nmero do job relacionado ao processo que se quer trazer para foreground. Exemplificando na prtica:
# fg 1 updatedb
Com o nmero que o comando jobs retornou, s colocar o processo em primeiro plano. Assim o processo ocupa o shell novamente.
Para terminar a execuo de um programa em background poder mat-lo pelo comando kill, pois ele aparece no ps aux. Ou trazer para primeiro plano e dar um CTRL+C, que um Sinal de Interrupo.
Trazendo o processo novamente para primeiro plano, ele ocupa meu shell, ento deve-se jog-lo novamente para segundo plano:
Processos - 12 Ento, para fazer isso necessrio parar o processo no shell que est travado com o mesmo :
CTRL+Z
Essa seqncia de tecla PRA (STOP) o processo, mas o mesmo fica em segundo plano parado. Ento, necessrio executar o comando jobs novamente:
#jobs
Assim poder ver que ele est l, s que agora parado. Copie o nmero dele que o jobs te retornou e fala para ele continuar em segundo plano agora:
# bg N
Exemplo prtico: Abro um arquivo no VI
$ vi teste.txt
Suponha que voc quer usar o terminal, ento pare o Vi por um tempo. Para enviar o VI para segundo plano:
#fg 1
Processos - 13
nice e renice
O nice usado para quando quero iniciar um processo com uma determinada prioridade. J o renice para mudar a prioridade de um processo que j esteja rodando. Mas os dois definem prioridades tanto baixa quanto alta. Esses comandos costumam cair na LPI!
Lembrando que:
A regra simples e inversamente proporcional: quanto menor o nmero, maior sua prioridade. Ou seja, se o seu processo deve ter prioridade alta, coloque um valor baixo, como por exemplo -10.
Por motivos bvios de segurana, usurios normais no podem alterar a prioridade de seu processo para um valor abaixo de 0 (zero).
Processos - 14 Usando o comando top para verificar a prioridade, voc deve analisar a coluna NI. O campo "NI" refere-se ao nmero setado pelo "nice". Observe que vrios programas do sistema utilizam nmeros diferentes de prioridade. Observe tambm que, caso no use o comando "nice" (o que acontece na maioria dos casos), a prioridade assumida por padro a "0"; vrios programas da listagem do "top" provavelmente devem ter essa prioridade. Exemplo: Vou iniciar um processo com prioridade alta:
# ps -lax
Onde a opo -l do comando ps para listar em formato longo, ou seja, todas as informaes. Agora para mudar a prioridade de um processo que est em execuo, preciso do PID dele.
# ps aux
#renice 19 -p PID
Essa questo de prioridades, usa-se mais em servidores como banco de dados, que precisam de total ateno, j que as gravaes no banco so em tempo real. De qualquer forma isso fica transparente para o usurio do sistema. Os comandos "nice" e "renice" mostram-se muito teis em diversas situaes, principalmente naquelas em que o desempenho e a rapidez so essenciais. No entanto, seu uso deve ser ponderado, uma vez que ao mudar a prioridade de um processo para "-20" ou algum valor prximo a isso o sistema torna-se extremamente lento.
Processos - 15
interessante comentar tambm sobre os seguintes comandos: fuser e nohup. O comando fuser mostra qual processo faz uso de um determinado arquivo ou diretrio. Sua sintaxe :
-k - finaliza o processo que utiliza o arquivo/diretrio; -v - o resultado mostrado em um padro de exibio semelhante ao comando ps.
Usa-se muito o fuser para fazer check list para verificar se um determinado servio est no ar. Veja isso mais adiante na prtica.
Suponha que algum esteja usando o cd-rom, mas voc quer desmont-lo, mas no consegue e nem sabe quem est usando.
# fuser -v /media/cdrom USER PID ACCESS COMMAND /media/cdrom: leo 5125 ..c.. bash
Atravs desse comando possvel ver que quem est usando o diretrio onde est montado o cd-rom o usurio leo e o PID desse processo 5125.
# fuser -k /media/cdrom
# fuser -v /media/cdrom
Outro exemplo verificar o PID de um servio de rede, como por exemplo o SSH:
# fuser -v 22/tcp USER PID ACCESS COMMAND 22/tcp: root 3025 F.... sshd
Esse exemplo um passo da check list que fazemos quando vamos configurar um servio, veremos isso com detalhe mais adiante. No caso aqui o processo do ssh est rodando e seu PID 3025.
Processos - 17
O comando nohup permite que o processo fique ativo mesmo quando o usurio faz logout. Em sistemas baseados em Unix (Unix-Like) normal que eles interrompam processos caso seu dono no esteja mais ativo, por isso, o nohup pode ser muito til para manter o processo ativo mesmo se o dono fizer logout. Sua sintaxe :
# nohup comando