Processos No Linux

78
Processos no Linux

description

Processos no linux

Transcript of Processos No Linux

Page 1: Processos No Linux

Processos no Linux

Page 2: Processos No Linux

Agenda:

Introdução

Informações de um Processo

Comandos

Page 3: Processos No Linux

Introdução

Page 4: Processos No Linux

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

Page 5: Processos No Linux

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:

Page 6: Processos No Linux

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.

Page 7: Processos No Linux

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:

Page 8: Processos No Linux

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.

Page 9: Processos No Linux

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.

Page 10: Processos No Linux

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.

Page 11: Processos No Linux

Informações de um Processo

Page 12: Processos No Linux

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.

Page 13: Processos No Linux

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.

Page 14: Processos No Linux

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.

Page 15: Processos No Linux

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".

Page 16: Processos No Linux

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.

Page 17: Processos No Linux

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.

Page 18: Processos No Linux

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.

Page 19: Processos No Linux

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.

Page 20: Processos No Linux

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.

Page 21: Processos No Linux

UID e GID

•Efetiva: usada para abrir arquivos.

•Real: usada para enviar sinais.

UID/GID real e

efetiva.

Page 22: Processos No Linux

Comandos

Page 23: Processos No Linux

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.

Page 24: Processos No Linux

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.

Page 25: Processos No Linux

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.

Page 26: Processos No Linux

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

Page 27: Processos No Linux

ps

Page 28: Processos No Linux

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.

Page 29: Processos No Linux

ps

Page 30: Processos No Linux

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:

Page 31: Processos No Linux
Page 32: Processos No Linux

ps

Das opções relacionadas, a

combinação mais usada é aux:

$ ps aux

Como exemplo, o resultado obtido

com esse comando foi o

seguinte:

Page 33: Processos No Linux
Page 34: Processos No Linux

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;

Page 35: Processos No Linux

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;

Page 36: Processos No Linux

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;

Page 37: Processos No Linux

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:

Page 38: Processos No Linux

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.

Page 39: Processos No Linux

• 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.

Page 40: Processos No Linux

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 &

Page 41: Processos No Linux
Page 42: Processos No Linux

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.

Page 43: Processos No Linux
Page 44: Processos No Linux
Page 45: Processos No Linux

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.

Page 46: Processos No Linux

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.

Page 47: Processos No Linux

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.

Page 48: Processos No Linux

top

Page 49: Processos No Linux

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).

Page 50: Processos No Linux

Lembre-se do man top...

Page 51: Processos No Linux

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.

Page 52: Processos No Linux

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:

Page 53: Processos No Linux

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.

Page 54: Processos No Linux
Page 55: Processos No Linux

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

Page 56: Processos No Linux

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.

Page 57: Processos No Linux

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.

Page 58: Processos No Linux

– -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.

Page 59: Processos No Linux

la

Page 60: Processos No Linux

ls -la

Page 61: Processos No Linux

-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.

Page 62: Processos No Linux

• 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

Page 63: Processos No Linux

free

Page 64: Processos No Linux

time ls

Page 65: Processos No Linux

Sinais de Processos

Page 66: Processos No Linux

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.

Page 67: Processos No Linux

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.

Page 68: Processos No Linux

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.

Page 69: Processos No Linux

Estado dos processos

Page 70: Processos No Linux

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.

Page 71: Processos No Linux

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.

Page 72: Processos No Linux

Estado dos processos

Page 73: Processos No Linux

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.

Page 74: Processos No Linux

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.

Page 75: Processos No Linux

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.

Page 76: Processos No Linux

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()

Page 77: Processos No Linux
Page 78: Processos No Linux

Voltaremos a esse assunto em breve…