segunda-feira, 16 de abril de 2012

Processos em execução no sistema Linux

O Linux, como qualquer sistema UNIX, é um sistema operacional multitarefa, isto é, vários processos podem ser executados ao "mesmo tempo". Um processo é um programa em execução independente que tem seu próprio conjunto de recursos.

No Linux, os recursos do sistema, como a memória e os discos, são gerenciados pelo kernel, que é o núcleo do sistema operacional. Tudo mais, em execução no sistema, são processos.

Quando o usuário se conecta, seu terminal é controlado pelo seu shell, que é um processo em execução. Então, o shell cria um novo processo sempre que o usuário fornecer um comando para ser executado. O sistema operacional trabalha com uma infinidade de processos e possui alguns meios para controlá-los.

Os processos possuem um conjunto de características, as principais são:

- Proprietário do processo (UID e GID);
- Estado do processo (em espera, em execução, etc);
- Prioridade de execução;
- Recursos de memória e CPU.

Um PID (Process Identifier) é um número de identificação que o sistema dá a cada processo. Para cada novo processo, um novo número deve ser atribuído. Não se pode ter um único PID para dois ou mais processos ao mesmo tempo.

É comum que um processo já existente se duplique para que a cópia possa ser atribuída a uma nova tarefa. O processo de origem recebe o nome de "processo pai" e o novo é denominado "processo filho". Nesse ponto que o PPID (Parent Process Identifier) passa a ser usado. O PPID de um processo é o PID de seu processo pai. No Linux, o processo "pai de todos" é o init e possui o PID de número 1.


PS

O comando 'ps' informa quais os processos em execução no momento, exibindo o estado dos processos correntes. Se somente 'ps' for digitado na linha de comando, o sistema mostra os processos do usuário. Uma combinação de opções existe para obter mais detalhes.

Principais opções:

-e                 seleciona todos os processos
-u ou -U usuario   seleciona pelo ID efetivo ou real do usuário
-t terminal        seleciona pelo tty
-f ou -F           listagem total ou extra total
-l                 formato longo
-p pid             seleciona pelo PID

Observação: O comando 'ps' aceita diferentes sintaxes nas opções, mantendo compatibilidade com o UNIX, BSD e GNU. Por exemplo, 'ps aux' é reconhecido para compatibilidade com a sintaxe BSD.


TOP

O comando 'top' também exibe as tarefas do sistema mas em uma atualização que se repete. O 'top' proporciona uma visão em tempo real do sistema em execução. As informações do sistema, separadas em categorias, são exibidas ordenadamente e podem ser modificadas por sua interface interativa.

Principais comandos de interação:

l       liga/desliga a exibição de "Uptime" e "Load Average"
m       liga/desliga a exibição de uso de memória e swap
t       liga/desliga a exibição do estado de tarefas e uso da CPU
1       liga/desliga a exibição de CPUs separadas ou unificadas
u       especifica o nome do usuário
< ou >  move entre as colunas para ordenação
f       define quais colunas serão vistas
        (digitando a letra correspondente exibe/exclui a coluna)
o       define a posição das colunas visíveis
        (digitando a letra correspondente em maiúscula aproxima, em minúscula afasta)
q       sai do programa


Planos de Execução

Os processos que são controlados diretamente pela tela chamam-se processos em primeiro plano. Os outros processos que foram inicializados, mas que o usuário não possui controle sobre eles, chamam-se processos em segundo plano. Podemos ter um processamento em primeiro plano, porém muitos processamentos em segundo plano podem ser executados simultaneamente.

O ambiente gráfico X Window facilita a execução de diversos programas ao mesmo tempo. No console, o usuário terá que executar os programas em segundo plano, mantendo no máximo um em primeiro plano. Para executar um comando em segundo plano, coloca-se o símbolo & no final da linha de comando, por exemplo:

# gcc prog.c &

O prompt retornará e o usuário poderá continuar executando outros comandos enquanto o primeiro está sendo processado. Antes do prompt ser retornado, o shell informa o número do serviço (trabalho) que é atribuído ao comando e o PID do processo, veja um exemplo:

[1] 411

O [1] é o número do serviço e o 411 é o número de identificação do processo (PID).


BG

Se o programa já estiver sendo executado, em primeiro plano, o usuário deverá usar o comando 'bg', que põe um processo em execução em segundo plano.

Para isso digita-se 'Ctrl+Z', assim o processo recebe um sinal SIGSTOP e o shell interrompe a execução do mesmo. Então usa-se o 'bg' para colocar o processo interrompido no modo de execução em segundo plano e o processo irá continuar sua execução.

Sintaxe do comando 'bg':

bg [%id]

%id é o número do serviço (necessário ter o sinal de porcentagem antes).

Exemplo:

# bg %1

Imediatamente após o uso das teclas 'Ctrl+Z' o shell exibe o número do serviço junto com outras informações.


FG

Para retornar o processo ao primeiro plano, usa-se o comando 'fg', que transferirá o controle do terminal para o processo.

Sua sintaxe é a mesma do comando 'bg'.

fg [%id]


JOBS

Para descobrir o número do serviço atribuído ao processo usa-se o comando 'jobs'. O comando 'jobs' lista os processos que estão parados ou executando em segundo plano pelo shell. Os processos são ordenados pelo número do serviço que é atribuído ao seu comando. Veja a sintaxe:

jobs [-l]

O parâmetro -l faz com que o comando 'jobs' liste também o PID de cada processo. Em sua saída o comando 'jobs' retorna, além do número do serviço, o estado do processo, a linha digitada no comando e, opcionalmente, o PID.


Praticando

No ambiente gráfico, inicie alguma aplicação gráfica pela linha de comando, digitada no prompt do shell em uma janela de terminal. Por exemplo a calculadora gráfica do KDE (kcalc). Envie o sinal SIGSTOP para o processo da calculadora e tente operá-la no ambiente gráfico. Depois, coloque o processo no modo de execução em segundo plano e verifique sua operação. Por fim, liste os processos que estão em segundo plano.

Roteiro:

$ kcalc

Ctrl+z

$ bg %1

$ jobs

Nenhum comentário:

Postar um comentário