Processos No Linux
-
Upload
chiquim66624 -
Category
Documents
-
view
34 -
download
2
description
Transcript of Processos No Linux
Processos no Linux
Agenda:
Introdução
Informações de um Processo
Comandos
Introdução
Introdução
Nos sistemas operacionais, um processo é a forma de representar um programa em execução.
É o processo que utiliza os recursos do computador - processador, memória, etc - para a realização das tarefas para as quais a máquina é destinada.
Veremos os principais conceitos relacionados a processos no Linux e as ferramentas usadas para manipulá-los e gerenciá-los
Introdução
O sistema operacional lida com uma infinidade de processos e, por isso, é necessário ter meios que permitam controlá-
los.
• Proprietário do processo;
• Estado do processo (em espera, em execução, etc);
• Prioridade de execução;
• Recursos de memória.
Para isso, os processos contam com um conjunto de características, dentre as quais:
Introdução
O trabalho de gerenciamento de processos precisa contar
com essas informações e com várias outras.
Uma das informações usadas é atribuir a cada processo um
PID.
Modos de execução
• Modo Kernel
• Modo User
Em Unix, um processo
executa em 2 modos:
• kernel ou system space: partilhada por todos os processos.
• memória privada: (pilha, bss).
• memória partilhada: código, bibliotecas partilhadas, mmap
• Privadas mas controladas pelo kernel: área-u e pilha do kernel.
Cada processo tem
memória virtual:
Execução
Um programa pode ser
executado de duas formas:
1) Primeiro Plano
Também chamado de foreground.
2) Segundo Plano
Também chamado de background.
Foreground
Quando você deve esperar o término da execução de
um programa para executar um novo comando.
Somente é mostrado o aviso de comando após o término de execução do
comando/programa.
Background
• Após iniciar um programa em background, é mostrado um número PID (identificação do Processo) e o aviso de comando é novamente mostrado, permitindo o uso normal do sistema.
• O programa executado em background continua sendo executado internamente.
• Após ser concluído, o sistema retorna uma mensagem de pronto acompanhado do número PID do processo que terminou.
Usado quando não se precisa
esperar o término da
execução de um programa para executar
um novo comando.
Informações de um Processo
Informações de um Processo
Espaço de Endereçamento
do Usuário:
texto;
dados;
pilha do usuário;
memória partilhada.
Informação de controle:
área-u;
proc;
pilha modo-kernel;
mapa de tradução de endereços.
Credenciais:
UIDs,
GIDs.
Variáveis de Ambiente
Contexto de Hardware:
PC,
SP,
PSW (processor status word),
mem regs,
FPU regs.
A Área-U PCB (process control block): armazena o contexto de hardware quando o processo não está ativo.
pointer to proc;
UID e GID real e efetivo;
argumentos e resultado da syscall corrente;
signal handlers; (manipuladores de sinais)
info sobre texto, dados e pilha, mais gestão de memória;
FD abertos (dinâmico ou estático);
nó-v do directório corrente e do terminal currentel
estatísticas (CPU, profiling, quota);
Pilha modo-kernel.
PID e PPID
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,
ou seja, não se pode ter um único PID para dois ou mais
processos ao mesmo tempo.
PID e PPID
Os sistemas baseados em Unix precisam que um processo já
existente se duplique para que a cópia possa ser atribuída a
uma tarefa nova.
Quando isso ocorre, o processo "copiado" recebe o
nome de "processo pai", enquanto que o novo é
denominado "processo filho".
PID e PPID
É 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 proprietário, um usuário que seja considerado seu dono.
A partir daí, o sistema saberá, através das permissões fornecidas pelo proprietário, quem pode e quem não pode executar o processo em questão.
Para lidar com os donos, o sistema usa os números UID e GID.
UID e GID
O Linux gerencia os usuários e os grupos através de números conhecidos como UID (User Identifier) e GID (Group Identifier). Como é possível perceber, UID são números de usuários e GID são números de grupos.
Os nomes dos usuários e dos grupos servem apenas para facilitar o uso humano do computador.
UID e GID
Cada usuário precisa pertencer a um ou mais grupos.
Como cada processo (e cada arquivo) pertence a um usuário, logo, esse processo pertence ao grupo de seu proprietário.
Assim sendo, cada processo está associado a um UID e a um GID.
UID e GID
Os números UID e GID variam de 0 a 65536.
Dependendo do sistema, o valor limite pode ser maior.
No caso do usuário root, esses valores são sempre 0 (zero).
Assim, para fazer com que um usuário tenha os mesmos privilégios que o root, é necessário que seu GID seja 0.
UID e GID
•Efetiva: usada para abrir arquivos.
•Real: usada para enviar sinais.
UID/GID real e
efetiva.
Comandos
Comandos Nice e Renice
Neste caso é necessário entender o conceito de
gentileza.
Um processo pode ter prioridade em relação a outros em sua execução.
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 níveis de gentileza, também chamados de nice, são determinados
através de números.
Comandos Nice e Renice
Quanto mais alto for o valor nice, mais gentil é o processo.
Geralmente, o intervalo de números usados no nice são os inteiros entre -19 e 19.
Embora determinar a prioridade de um processo não seja uma prática comum, afinal, o próprio Linux faz muito bem essa tarefa, isso
pode ser necessário em alguma situação.
Para isso, utiliza-se um comando que recebe o mesmo nome do conceito: nice.
Comandos Nice e Renice
A sintaxe é: nice -n prioridade processo
• $ nice -n -5 casca
Por exemplo:
No exemplo, o processo casca recebe prioridade -5.
Trata-se de uma prioridade alta, afinal, como já dito, quanto menor o número menor sua gentileza.
Comandos Nice e Renice
Neste caso, o comando renice alterou a prioridade do processo 1000, assim como a prioridade dos processos do usuário goma.
Um exemplo:
$ renice +19 1000 -u goma
As opções do renice são:-u - a alteração ocorrerá nos processos do usuário informado;
-g - a alteração ocorrerá nos processos do grupo indicado;
-p - a alteração ocorrerá no processo cujo PID for informado.
Se um determinado processo está em execução, isso acontece com uma prioridade já definida. Para alterar um processo nessa condição, usa-se o comando renice, cuja sintaxe é:
$ renice prioridade opção processo/destino
ps
ps
O ps é um comando de extrema importância para o gerenciamento de processos.
Por ele, é possível saber quais os processos em execução 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 usuário.
É preciso usar uma combinação de opções para obter mais detalhes.
ps
ps
• a - mostra todos os processos existentes;
• e - exibe as variáveis de ambiente relacionadas aos processos;
• f - exibe a árvore de execução dos processos;
• l - exibe mais campos no resultado;
• m - mostra a quantidade de memória ocupada por cada processo;
• u - exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
• x - exibe os processos que não estão associados a terminais;
• w - se o resultado de processo não couber em uma linha, essa opção faz com que o restante seja exibido na linha seguinte.
As opções mais
importantes são os
seguintes:
ps
Das opções relacionadas, a
combinação mais usada é aux:
$ ps aux
Como exemplo, o resultado obtido
com esse comando foi o
seguinte:
ps
Usando a combinação lax, o resultado mostra
mais detalhes: $ ps lax
A seguir, vê-se a descrição dos campos mostrados anteriormente e alguns que só são mostrados com a
combinação lax: USER - nome do usuário dono do processo;
ps
UID - número de identificação do usuário dono do processo;
PID - número de identificação do processo;
PPID - número de identificação do processo pai;
%CPU - porcentagem do processamento usado;
%MEM - porcentagem da memória usada;
VSZ - indica o tamanho virtual do processo;
RSS - sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
TTY - indica o identificador do terminal do processo;
START - hora em que o processo foi iniciado;
ps
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 função do kernel onde o processo se encontra em modo suspenso;
ps
• R - executável;
• D - em espera no disco;
• S - Suspenso;
• T - interrompido;
• Z - Zumbi.
STAT - indica o estado atual do processo, sendo
representado por uma letra:
• 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.
Essas letras podem ser
combinadas e ainda acrescidas
de:
jobs
O comando jobs mostra os processos que estão parados ou rodando em segundo plano.
• Exemplo vi& Processos em segundo plano são iniciados usando o símbolo “&” no final da linha de
comando
O número de identificação de cada processo parado ou em segundo plano (job), é usado com os
comandos ‘fg’ e ‘bg’.
Um processo interrompido pode ser finalizado usando-se o comando kill %[num], onde [num] é o número do
processo obtido pelo comando jobs.
• O comando será executado em segundo plano e deixará o sistema livre para outras tarefas.
• Após o comando find terminar, será mostrada uma mensagem.
Parando um programa
• Para iniciar um programa em primeiro plano, basta digitar seu nome normalmente.
• Para iniciar um programa em segundo plano, acrescente o caracter “&” após o final do comando.
• Mesmo que um usuário execute um programa em segundo plano e saia do sistema, o programa continuará sendo executado até que seja concluído ou finalizado pelo usuário que iniciou a execução (ou pelo usuário root). – Exemplo: find / -name boot.b &
fg
• Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano.
• Você deve usar o comando jobs para pegar o número do processo rodando em segundo plano ou interrompida, este número será passado ao comando fg para ativa-lo em primeiro plano.
– fg [número]
– Onde número é o número obtido através do comando jobs.
bg
• Permite fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano.
• Para fazer um programa em primeiro plano rodar em segundo, é necessário primeiro interromper a execução do comando com CTRL+ Z, será mostrado o número da tarefa interrompida, use este número com o comando bg para iniciar a execução do comando em segundo plano. – bg [número] – Onde: número número do programa obtido com o
pressionamento das teclas CTRL+Z ou através do comando jobs.
ps [opções] Onde:
a Mostra os processos criados por você e de outros usuários do sistema.
x Mostra processos que não são controlados pelo terminal.
u Mostra o nome de usuário que iniciou o processo e hora em que o processo foi iniciado.
m Mostra a memória ocupada por cada processo em execução.
f Mostra a árvore de execução de comandos (comandos que são chamados por outros comandos).
e Mostra variáveis de ambiente no momento da inicialização do processo.
w Mostra a continuação da linha atual na próxima linha ao invés de cortar o restante que não couber na tela.
top
Mostra os programas em execução ativos, parados, tempo usado na CPU, detalhes sobre o uso da memória RAM, Swap, disponibilidade para execução de programas no sistema, etc.
top é um programa que continua em execução mostrando continuamente os processos que estão rodando em seu computador e os recursos utilizados por eles.
Para sair do top, pressione a tecla q.
top
top [opções]
Onde:
-d [tempo ] Atualiza a tela após o [tempo] (em segundos).
-s Diz ao top para ser executado em modo seguro.
-i Inicia o top ignorando o tempo de processos zumbis.
-c Mostra a linha de comando ao invés do nome do programa.
A ajuda sobre o top pode ser obtida dentro do programa pressionando a tecla h ou pela página de manual (man top).
Lembre-se do man top...
top
É possível manipular alguns recursos do comando top através das teclas do teclado.
Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla de
espaço.
Pressione a tecla h enquanto estiver utilizando o top para ver a lista completa de
opções e teclas de atalho.
Fuser
• Sua sintaxe é:
• fuser -opção caminho (do arquivo ou diretório)
O comando fuser mostra qual
processo faz uso de um determinado
arquivo ou diretório.
• k - finaliza o processo que utiliza o arquivo/diretório em questão;
• -i - deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
• -u - mostra o proprietário do processo;
• -v - o resultado é mostrado em um padrão de exibição semelhante ao comando ps.
Entre as opções, tem-se:
pstree
• Sua sintaxe é:
• pstree -opção PID
Esse comando mostra processos relacionados em formato de árvore.
• u - mostra o proprietário do processo;
• -p - exibe o PID após o nome do processo;
• -c - mostra a relação de processos ativos;
• -G - usa determinados caracteres para exibir o resultado em um formato gráfico.
Entre as opções, tem-se:
Se ao digitar o comando pstree o PID não for informado, todos os processos serão listados.
NOHUP
O comando nohup possibilita ao processo ficar ativo mesmo quando o usuário faz logout.
É da natureza dos sistemas baseados em Unix interromper processos caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil.
Sua sintaxe é:
nohup comando
ls
• Lista os arquivos de um diretório. – 3
• onde:
– caminho/arquivo Diretório/arquivo que será listado.
– caminho1/arquivo1 Outro Diretório/arquivo que será listado. Podem ser feitas várias listagens de uma só vez.
ls
• opções – -a, –all Lista todos os arquivos (inclusive os ocultos) de um
diretório. – -A, –almost-all Lista todos os arquivos (inclusive os ocultos) de
um diretório, exceto o diretório atual e o de nível anterior. – -B, –ignore-backups Não lista arquivos que terminam com ~
(Backup). – –color=PARAM Mostra os arquivos em cores diferentes,
conforme o tipo de arquivo. PARAM – pode ser:
• never - Nunca lista em cores (mesma coisa de não usar o parâmetro –color).
• always - Sempre lista em cores conforme o tipo de arquivo. • auto - Somente colore a listagem se estiver em um terminal.
– -d, –directory Lista os nomes dos diretórios ao invés do conteúdo.
– -f Não classifica a listagem.
– -F Insere um caracter após arquivos executáveis (’*’), diretórios (’/’), soquete (’=’), link simbólico
– (’@’) e pipe (’|’). Seu uso é útil para identificar de forma fácil tipos de arquivos nas listagens de diretórios.
– -G, –no-group Oculta a coluna de grupo do arquivo.
– -h, –human-readable Mostra o tamanho dos arquivos em Kbytes, Mbytes, Gbytes.
la
ls -la
-rwxr-xr-- 1 traina traina 8192 2012-02-15 16:00 teste
• -rwxr-xr-- São as permissões de acesso ao arquivo teste.
• A primeira letra (da esquerda) identifica o tipo do arquivo, se tiver um d é um diretório, se tiver um “-” é um arquivo normal.
• As permissões de acesso serão explicadas em detalhes futuramente.
• 1 Se for um diretório, mostra a quantidade de sub-diretórios existentes dentro dele. Caso for um arquivo, será 1.
• traina Nome do dono do arquivo teste. • user Nome do grupo que o arquivo teste pertence. • 8192 Tamanho do arquivo (em bytes). • 02 Mês da criação/ última modificação do arquivo. • 15 Dia que o arquivo foi criado. • 16:00 Hora em que o arquivo foi criado/modificado. Se o
arquivo foi criado há mais de um ano, em seu lugar é mostrado o ano da criação do arquivo.
• teste Nome do arquivo.
-rwxr-xr-- 1 traina user 8192 2012-02-15 16:00 teste
free
time ls
Sinais de Processos
Sinais de Processos
Os sinais são meios usados para que os processos possam se
comunicar e para que o sistema possa interferir em seu
funcionamento.
Por exemplo, se o usuário 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
instruções sobre o que fazer com ele, tal ação é colocada em prática.
Se não houver instruções pré-programadas, o próprio Linux pode executar a ação de acordo com suas
rotinas.
Entre os sinais existentes, tem-se os seguintes exemplos:
STOP - esse sinal tem a função de interromper a execução de um processo e só reativá-lo após o recebimento do sinal CONT;
CONT - esse sinal tem a função de instruir a execução de um processo após este ter sido interrompido;
SEGV - esse sinal informa erros de endereços de memória;
TERM - esse sinal tem a função de terminar completamente o processo, ou seja, este deixa de existir após a finalização;
ILL - esse sinal informa erros de instrução ilegal, por exemplo, quando ocorre divisão por zero;
KILL - esse sinal tem a função de "matar" um processo e é usado em momentos de criticidade.
Estado dos processos
Estado dos processos
• Quando um processo é criado, isso não significa que ele será imediatamente executado.
• Além disso, determinados processos podem ser temporariamente paralisados para que o processador possa executar um processo prioritário. Isso quer dizer que os processos, em certos momentos, podem estar em situações de execução diferentes.
Estado dos processos
O Linux trabalha, essencialmente, com quatro tipos de situação, isto é, estados: – Executável: 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 executável;
– Zumbi: o processo é considerado "morto", mas, por alguma razão, ainda existe;
– Parado: o processo está "congelado", ou seja, não pode ser executado.
Estado dos processos
Estado dos processos
• TASK_RUNNING: O processo está em execução na CPU ou aguardando em uma fila de execução para ser planejado.
• TASK_INTERRUPTIBLE: O processo está inativo, aguardando algum evento ocorrer.
• O processo está aberto para ser interrompido por sinais. Uma vez sinalizado ou ativado pela chamada de ativação explícita, o processo faz transição para TASK_RUNNING.
Estado dos processos
• TASK_UNINTERRUPTIBLE: O estado do processo é semelhante a TASK_INTERRUPTIBLE exceto que nesse estado ele não processa sinais.
• Pode até não ser desejável interromper o processo enquanto nesse estado, pois ele pode estar no meio da conclusão de alguma tarefa importante.
• Quando o evento que ele está aguardando ocorre, o processo é ativado pela chamada de ativação explícita.
Estado dos processos
• TASK_STOPPED: A execução do processo está parada, ele não está em execução e não está apto para ser executado.
• No recebimento de sinais como SIGSTOP, SIGTSTP, e assim por diante, o processo chega nesse estado. O processo seria executável novamente após o recebimento do sinal SIGCONT.
• TASK_TRACED: Um processo chega nesse estado enquanto está sendo monitorado por outros processos, como depuradores.
Estado dos processos
• EXIT_ZOMBIE: O processo foi finalizado. Ele está demorando simplesmente para seu pai coletar algumas informações estatísticas sobre ele.
• EXIT_DEAD: O estado final (exatamente como parece). O processo atinge esse estado quando estiver sendo removido do sistema, pois seu pai acaba de coletar todas as informações estatísticas emitindo a chamada do sistema wait4() ou waitpid()
Voltaremos a esse assunto em breve…