Definição |
A seguinte definição de processo foi apresentada por Tanenbaum em "Sistemas Operacionais - Projeto e Implementação":
A idéia-chave aqui é que um processo é um tipo de atividade. Ele tem um programa, entrada, saída e um estado. Um único processador pode ser compartilhado entre vários processos, com algum algoritmo de agendamento sendo utilizado para determinar quando parar de trabalhar em um processo e servir a um diferente.
Ainda segundo Tanenbaum, são estados de um processo:
Um processo pode criar outros processos. Dizemos que um processo é pai do processo que ele criou. Além disso, um processo-filho pode também criar novos processos, formando assim uma árvore hierárquica de processos.
No Linux |
O init é o primeiro processo inicializado no linux e é o pai de todos os outros processos. Se um processo termina e deixa processos-filho ainda executando, o processo init assume a paternidade destes processos.
Quando um usuário trabalha no modo monousuário, um único processo shell é inicializado. Qualquer comando digitado pelo usuário neste terminal irá gerar um ou mais processos. A árvore hierárquica dos processos tendo o shell como raiz é chamada de sessão.
Quando um usuário inicializa um gerenciador de janelas (ver X Windows), para cada terminal criado é alocado um processo shell responsável pelo terminal em questão. Cada terminal corresponde a uma sessão aberta pelo usuário sendo que as sessões são independentes entre si. Isto significa que uma alteração feita em um dos terminais não será reconhecida pelos outros terminais pois cada terminal possui o seu próprio conjunto de variáveis de ambiente. Por exemplo, ao entrar com o comando su em um dos terminais, apenas o terminal em questão passará a exibir o login do superuser.
Background e Foreground |
No linux, um processo pode estar em foreground ou em background, ou seja, em primeiro plano ou em segundo plano. Por exemplo, ao digitar o comando
ls -R /etc > teste
o sistema criará o arquivo teste com o conteúdo de todos os diretórios e arquivos que se encontram abaixo do diretório /etc. Durante a execução do comando acima, nenhum outro comando poderá ser digitado pelo usuário no mesmo terminal. Isto significa que o comando está sendo executado em primeiro plano impedindo assim a inicialização de outras atividades no mesmo terminal.
Para o exemplo acima, é possível liberar o shell para outras atividades enquanto o arquivo teste é criado. Basta que você digite
ls -R /etc > teste &
O símbolo & indica que o comando deve ser executado em background, ou seja, em segundo plano.
Se um processo está executando em foreground e você deseja colocá-lo em background, você deve:
Para trazer um processo do modo background para o modo foreground, você deve usar o comando fg.
Modelo Cliente-Servidor |
O Linux implementa muitas das suas funções usando o modelo cliente-servidor. Isto significa que existem processos que são criados especificamente para executar determinadas tarefas. Estas tarefas especiais são oferecidas aos outros processos do sistema na forma de serviços.
O processo responsável pela execução de um determinado serviço no sistema é chamado de servidor, enquanto o processo que solicita o serviço ao sistema é chamado de cliente.
Normalmente, as aplicações servidoras (daemons) são executadas em background, enquanto as aplicações clientes são executadas em foreground.
A grande vantagem em implementar funções do sistema dessa forma é tornar o kernel do Linux menor, pois tudo que o kernel faz neste caso é gerenciar a comunicação entre clientes e servidores. Além disso, o administrador pode escolher os serviços que o sistema tornará disponíveis.
São exemplos de daemons no Linux:
Por padrão, podemos usar os seguintes argumentos com os daemons:
Portanto, o comando
/etc/rc.d/init.d/atd status
fornece informação sobre o servidor at.
Observações |
O diretório /proc possui a lista dos processos que estão em execução no sistema. Cada processo é identificado neste diretório por um número. Por exemplo, o processo init é o processo 1.
Comandos relacionados |