Você está na página 1de 7

Processos no Linux

Autor: Emerson Alecrim <emersonalecrim at infowester.com>


Data: 23/11/2005

Introduo


Nos sistemas operacionais, um processo a forma de representar um programa em execuo. o processo que utiliza os
recursos do computador - processador, memria, etc - para a realizao das tarefas para as quais a mquina destinada. A
seguir, voc ver os principais conceitos relacionados a processos no Linux e as ferramentas usadas para manipul-los e gerenci-
los.

Composio de um processo

O sistema operacional lida com uma infinidade de processos e, por isso, necessrio ter meios que permitam control-los. Para
isso, os processos contam com um conjunto de caractersticas, dentre as quais:
Proprietrio do processo;
Estado do processo (em espera, em execuo, etc);
Prioridade de execuo;
Recursos de memria.

O trabalho de gerenciamento de processos precisa contar com as informaes acima e com outras de igual importncia para que
as tarefas sejam executadas da maneira mais eficiente. Um dos meios usados para isso atribuir a cada processo um PID.

PID e PPID

Um PID (Process Identifier) um nmero de identificao que o sistema d a cada processo. Para cada novo processo, um novo
nmero deve ser atribudo, ou seja, no se pode ter um nico PID para dois ou mais processos ao mesmo tempo.

Os sistemas baseados em Unix precisam que um processo j existente se duplique para que a cpia possa ser atribuda a uma
tarefa nova. Quando isso ocorre, o processo "copiado" recebe o nome de "processo pai", enquanto que o novo denominado
"processo filho". nesse ponto que o PPID (Parent Process Identifier) passa a ser usado: o PPID de um processo nada mais do
que o PID de seu processo pai.

UID e GID

Conforme j mencionado, cada processo precisa de um proprietrio, um usurio que seja considerado seu dono. A partir da, o
sistema saber, atravs das permisses fornecidas pelo proprietrio, quem pode e quem no pode executar o processo em
questo. Para lidar com os donos, o sistema usa os nmeros UID e GID.

O Linux gerencia os usurios e os grupos atravs de nmeros conhecidos como UID (User Identifier) e GID (Group Identifier).
Como possvel perceber, UID so nmeros de usurios e GID so nmeros de grupos. Os nomes dos usurios e dos grupos
servem apenas para facilitar o uso humano do computador.

Cada usurio precisa pertencer a um ou mais grupos. Como cada processo (e cada arquivo) pertence a um usurio, logo, esse
processo pertence ao grupo de seu proprietrio. Assim sendo, cada processo est associado a um UID e a um GID.

Os nmeros UID e GID variam de 0 a 65536. Dependendo do sistema, o valor limite pode ser maior. No caso do usurio root,
esses valores so sempre 0 (zero). Assim, para fazer com que um usurio tenha os mesmos privilgios que o root, necessrio
que seu GID seja 0.

Sinais de processos

Os sinais so meios usados para que os processos possam se comunicar e para que o sistema possa interferir em seu
funcionamento. Por exemplo, se o usurio executar o comando kill para interromper um processo, isso ser feito por meio de um
sinal.

Quando um processo recebe um determinado sinal e conta com instrues sobre o que fazer com ele, tal ao colocada em
prtica. Se no houver instrues pr-programadas, o prprio Linux pode executar a ao de acordo com suas rotinas.

Entre os sinais existentes, tem-se os seguintes exemplos:
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;
SEGV - esse sinal informa erros de endereos de memria;
TERM - esse sinal tem a funo de terminar completamente o processo, ou seja, este deixa de existir aps a finalizao;
ILL - esse sinal informa erros de instruo ilegal, por exemplo, quando ocorre diviso por zero;
KILL - esse sinal tem a funo de "matar" um processo e usado em momentos de criticidade.

O kill tambm um comando que o usurio pode usar para enviar qualquer sinal, porm, se ele for usado de maneira isolada, ou
seja, sem o parmetro de um sinal, o kill por padro executa o sinal TERM.

A sintaxe para a utilizao do comando kill a seguinte:

kill -SINAL PID

Como exemplo, vamos supor que voc deseja interromper temporariamente a execuo do processo de PID 4220. Para isso,
pode-se usar o seguinte comando:

$ kill -STOP 4220

Para que o processo 4220 volte a ser executado, basta usar o comando:

$ kill -CONT 4220

Se o sinal precisa ser enviado a todos os processos, pode-se usar o nmero -1 no lugar do PID. Por exemplo:

$ kill -STOP -1

Como j dito, usar o comando kill isoladamente - por exemplo, kill 4220 - faz com que este use o sinal TERM por padro. Esse
sinal, no entanto, pode ser ignorado pelos processos. por isso que boa prtica usar o comando "kill -9 PID" para "matar" um
processo, pois o nmero nove representa o sinal kill e este no pode ser ignorado. Isso deixa claro que se voc conhecer o
nmero que atribudo a um sinal, voc pode us-lo no lugar de seu nome. Com exceo de alguns sinais, a numerao de cada
um pode mudar de acordo com a distribuio ou com a verso do kernel.

Agora, imagine que voc no saiba qual o PID de um processo e tenha se esquecido que o comando ps (visto mais frente)
descobre tal informao. Neste caso, pode-se usar o comando killall, desde que voc saiba o nome do processo. A sintaxe :

killall -SINAL processo

Por exemplo:

$ killall -STOP vi

Estado dos processos

Quando um processo criado, isso no significa que ele ser imediatamente executado. Alm disso, determinados processos
podem ser temporariamente paralisados para que o processador possa executar um processo prioritrio. Isso quer dizer que os
processos, em certos momentos, podem estar em situaes de execuo diferentes. O Linux trabalha, essencialmente, com
quatro tipos de situao, isto , estados:
Executvel: o processo pode ser executado imediatamente;
Dormente: o processo precisa aguardar alguma coisa para ser executado. S depois dessa "coisa" acontecer que ele
passa para o estado executvel;
Zumbi: o processo considerado "morto", mas, por alguma razo, ainda existe;
Parado: o processo est "congelado", ou seja, no pode ser executado.


Comandos nice e renice


Ao abordarmos os comandos nice e renice necessrio entender o conceito de gentileza. Um processo pode ter prioridade em
relao a outros em sua execuo. Quando um processo gentil, significa que ele "oferece a gentileza" de permitir que um
processo com prioridade maior que a sua seja executado antes dele. Os nveis de gentileza, tambm chamados de nice, so
determinados atravs de nmeros. Quanto mais alto for o valor nice, mais gentil o processo. Geralmente, o intervalo de
nmeros usados no nice so os inteiros entre -19 e 19.

Embora determinar a prioridade de um processo no seja uma prtica comum, afinal, o prprio Linux faz muito bem essa tarefa,
isso pode ser necessrio em alguma situao. Para isso, utiliza-se um comando que recebe o mesmo nome do conceito: nice. A
sintaxe :

nice -n prioridade processo

Por exemplo:

$ nice -n -5 ntpd

No exemplo, o ntpd recebe prioridade -5. Trata-se de uma prioridade alta, afinal, como j dito, quanto menor o nmero menor
sua gentileza.

Se um determinado processo est em execuo, isso acontece com uma prioridade j definida. Para alterar um processo nessa
condio, usa-se o comando renice, cuja sintaxe :

$ renice prioridade opo processo/destino

As opes do renice so:
-u - a alterao ocorrer nos processos do usurio informado;
-g - a alterao ocorrer nos processos do grupo indicado;
-p - a alterao ocorrer no processo cujo PID for informado.

Um exemplo:

$ renice +19 1000 -u vol

Neste caso, o comando renice alterou a prioridade do processo 1000, assim como a prioridade dos processos do usurio vol.

Verificando processos com o ps

O ps um comando de extrema importncia para o gerenciamento de processos. Por ele, possvel saber quais os processos em
execuo atualmente, quais os UIDs e PIDs correspondentes, entre outros.

Se somente ps for digitado na linha de comando, geralmente o sistema mostra quais os processos do usurio. preciso usar uma
combinao de opes para obter mais detalhes.

As opes mais importantes so os seguintes:
a - mostra todos os processos existentes;
e - exibe as variveis de ambiente relacionadas aos processos;
f - exibe a rvore de execuo dos processos;
l - exibe mais campos no resultado;
m - mostra a quantidade de memria ocupada por cada processo;
u - exibe o nome do usurio que iniciou determinado processo e a hora em que isso ocorreu;
x - exibe os processos que no esto associados a terminais;
w - se o resultado de processo no couber em uma linha, essa opo faz com que o restante seja exibido na linha seguinte.

Das opes acima, a combinao mais usada aux:

$ ps aux

Como exemplo, o resultado obtido com esse comando foi o seguinte:



Note que usando a combinao lax, o resultado mostra mais detalhes:

$ ps lax

A seguir, segue a descrio dos campos mostrados anteriormente e alguns que s so mostrados com a combinao lax:
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;
%CPU - porcentagem do processamento usado;
%MEM - porcentagem da memria usada;
VSZ - indica o tamanho virtual do processo;
RSS - sigla de Resident Set Size, indica a quantidade de memria usada (em KB);
TTY - indica o identificador do terminal do processo;
START - hora em que o processo foi iniciado;
TIME - tempo de processamento j consumido pelo processo;
COMMAND - nome do comando que executa aquele processo;
PRI - valor da prioridade do processo;
NI - valor preciso da prioridade (geralmente igual aos valores de PRI);
WCHAN - mostra a funo do kernel onde o processo se encontra em modo suspenso;
STAT - indica o estado atual do processo, sendo representado por uma letra: R - executvel; D - em espera no disco; S -
Suspenso; T - interrompido; Z - Zumbi. Essas letras podem ser combinadas e ainda acrescidas de: W - processo paginado
em disco; < - processo com prioridade maior que o convencional; N - processo com prioridade menor que o convencional;
L - processo com alguns recursos bloqueados no kernel.

Verificando processos com o top

O comando ps trabalha como se tirasse uma fotografia da situao dos processos naquele momento. O comando top, por sua vez,
coleta as informaes, mas as atualiza regularmente. Geralmente essa atualizao ocorre a cada 10 segundos.

A sintaxe do comando top a seguinte:

top -opo

Entre as opes, tem-se as que se seguem:
-d - atualiza o top aps um determinado perodo de tempo (em segundos). Para isso, informe a quantidade de segundos
aps a letra d. Por exemplo: top -d 30;
-c - exibe a linha de comando ao invs do nome do processo;
-i - faz o top ignorar processos em estado zumbi;
-s - executa o top em modo seguro.

possvel manipular alguns recursos do comando top atravs das teclas do teclado. Por exemplo, para atualizar imediatamente o

resultado exibido, basta pressionar a tecla de espao. Se pressionar a tecla q, o top finalizado. Pressione a tecla h enquanto
estiver utilizando o top para ver a lista completa de opes e teclas de atalho.

Os recursos jobs, fg e bg, fuser, pstree, nohup

Para ter ainda mais controle sobre os processos executados no Linux, pode-se utilizar os seguintes comandos: jobs, fg e bg, fuser,
pstree, nohup. Cada um descrito a seguir:

jobs

Serve para visualizar os processos que esto parados ou executando em segundo plano (background). Quando um processo est
nessa condio, significa sua execuo feita pelo kernel sem que esteja vinculada a um terminal. Em outras palavras, um
processo em segundo plano aquele que executado enquanto o usurio faz outra coisa no sistema. Uma dica para saber se o
processo est em background verificar a existncia do caractere & no final da linha. Se o processo estiver parado, geralmente a
palavra "stopped" aparece na linha, do contrrio, a palavra "running" exibida. A sintaxe do jobs :

jobs -opo

As opes disponveis so:
-l - lista os processos atravs do PID;
-r - lista apenas os processos em execuo;
-s - lista apenas os processos parados.

Se na linha de um processo aparecer o sinal positivo (+), significa que este o processo mais recente a ser paralisado ou a estar
em segundo plano. Se o sinal for negativo (-), o processo foi o penltimo. Note tambm que no incio da linha um nmero
mostrado entre colchetes. Muitos confundem esse valor com o PID do processo, mas, na verdade, trata-se do nmero de ordem
usado pelo jobs.

fg e bg

O fg um comando que permite a um processo em segundo plano (ou parado) passar para o primeiro (foreground), enquanto
que o bg passa um processo do primeiro plano para o segundo. Para usar o bg, deve-se paralisar o processo. Isso pode ser feito
pressionando-se as teclas Ctrl + Z no teclado. Em seguida, digita-se o comando da seguinte forma:

bg +nmero

O nmero mencionado corresponde ao valor de ordem informado no incio da linha quando o comando jobs usado.

Quanto ao comando fg, a sintaxe a mesma:

fg +nmero

fuser

O comando fuser mostra qual processo faz uso de um determinado arquivo ou diretrio. Sua sintaxe :

fuser -opo caminho (do arquivo ou diretrio)

Entre as opes, tem-se:
-k - finaliza o processo que utiliza o arquivo/diretrio em questo;
-i - deve ser usada em conjunto com a opo k e serve para perguntar se a finalizao do processo deve ser feita;
-u - mostra o proprietrio do processo;
-v - o resultado mostrado em um padro de exibio semelhante ao comando ps.

pstree

Esse comando mostra processos relacionados em formato de rvore. Sua sintaxe :

pstree -opo PID

Entre as opes, tem-se:
-u - mostra o proprietrio do processo;
-p - exibe o PID aps o nome do processo;
-c - mostra a relao de processos ativos;
-G - usa determinados caracteres para exibir o resultado em um formato grfico.

Um detalhe importante: se ao digitar o comando pstree o PID no for informado, todos os processos sero listados.


nohup

O comando nohup possibilita ao processo ficar ativo mesmo quando o usurio faz logout. da natureza dos sistemas baseados em
Unix interromper processos caso seu proprietrio no esteja mais ativo, por isso, o nohup pode ser muito til. Sua sintaxe :

nohup comando

Finalizando


Saber lidar com processos pode ser crucial para manter um computador funcionando e executando suas tarefas numa situao
crtica. O assunto essencial a administradores de sistemas, mas importante at mesmo ao usurio domstico. Obviamente que
o controle de processos no se resume aos recursos citados aqui, uma vez que este artigo deve ser interpretado como um guia
bsico. Alm disso, se voc pretende obter algum certificado em Linux, ter conhecimento sobre o controle de processos pode lhe
dar pontos significativos. Por isso, no hesite em explorar os comandos. Se quiser mais detalhes, use os recursos de ajuda, como
o tradicional "man comando".

Você também pode gostar