360 likes | 504 Views
Processos. Processos. Abstração do UNIX para gerência de memória, CPU e recursos de I/O; É um conjunto de dados e instruções que são executadas, em geral sem compartilhar o seu próprio espaço de endereçamento virtual; Um programa/job pode necessitar de vários processos até seu término.
E N D
Processos • Abstração do UNIX para gerência de memória, CPU e recursos de I/O; • É um conjunto de dados e instruções que são executadas, em geral sem compartilhar o seu próprio espaço de endereçamento virtual; • Um programa/job pode necessitar de vários processos até seu término.
Processos • Um comando simples (ls por exemplo) será executado por apenas um processo; • O administrador tem a incumbência de monitorar o status dos processos, controlar quanto do tempo da CPU um processo gasta, enviar sinais para um processo e suspender sua execução quando necessário.
Componentes de um Processo • Espaço de endereçamento • Código do programa e variáveis usadas • Pilha do processo • Outras informações necessárias • Estruturas de dados internas ao kernel • Localização do espaço de endereçamento • Status corrente • Prioridade de execução • Informações acerca dos recursos usados • A máscara de sinal do processo • Identificação do proprietário
Tipos de Processos • Processos interativos • S₧o inicializados e controlados por uma sessão de terminal • Executados em foreground • Estão ligados a um terminal para entrada e saída de dados • Executados em background • Não estão ligados a nenhum terminal • Daemons • São processos servidores, geralmente inicializados no boot da máquina (background)
Atributos dos Processos • Process ID (PID) • Associado pelo kernel • Único no sistema • Parent Process ID (PPID) • Prioridade (Nice Number) • Número atribuído ao processo e que influencia o cálculo da sua prioridade interna • TTY • Normalmente é o terminal onde o seu processo foi iniciado
Atributos dos Processos • Real and Effective User ID (UID, EUID) • UID: Aquele que criou o processo • EUID: Usado para determinar o direito de acesso do processo aos recursos do sistema (setuid) • Real and Effective Group ID (GID, EGID) • Mapeados no /etc/group • Quando um processo é inicializado, o GID é configurado para o mesmo do processo pai • EGID: Análogo ao EUID em relação ao UID
Ciclo de Vida de um Processo fork P1 P1 PID 10 PID 356 • fork • Cria uma cópia idêntica ao processo pai, mas com outro PID, PPID do pai, cópias próprias dos descritores de arquivo e contabilidade própria.
Ciclo de Vida de um Processo P1 PID 34 exec P2 PID 34 • exec • Muda o contexto do processo que está sendo executado • Inicializa os segmentos de dados e pilha para um estado inicial pré-definido
Ciclo de Vida de um Processo init init PID 424 fork PID 1 exec getty PID 424 exec login PID 424 exec sh sh PID 563 PID 424 fork exec grep PID 563 • Exemplo:
Estados possíveis dos processos • O: running - o processo está sendo executado; • R: runnable - esperando apenas por tempo de CPU; • S: sleeping - esperando o término de um evento específico; • Z: zombie - o processo terminou e o pai não está esperando (está tentando morrer); • T: stopped - está proibido de executar.
Comando Exit • Notifica o kernel que o processo vai morrer • Libera espaço de endereçamento • Não fornece mais tempo de CPU • O PID ainda não é liberado • Chamada de sistema wait
Iniciando vários processos com & • lp report & [1] 1746 • netscape & [2] 1750 • Os processos são iniciados e rodam em segundo plano
Entrada e Saída Padrões • Em unix um processo é automaticamente aberto com três arquivos abertos: • stdin Entrada padrão • stdout Saída padrão • stderr Saída de erro padrão
Iniciando vários processos com | • O símbolo | é chamado de “pipe” (canal) • Estabelece um canal entre dois processos • Por exemplo: • ls | wc -l • A saída padrão do comando ls é transferida para a entrada padrão do comando wc (conta palavras) • Forma geral • comando | comando | comando ... • Todos os processos são iniciados ao mesmo tempo e são filhos do shell atual
Redirecionando entradas/saídas • < símbolo usado para redirecionar a entrada de um comando da entrada padrão para um arquivo • mail sarah < info • > símbolo usado para redirecionar a saída de um comando da saída padrão para um arquivo • ls -la > lista.txt • cat > dados.txt
Redirecionando cont • >> usado para acrescentar ou adicionar informações em um arquivo já existente • date > diretorio • ls | sort >> diretorio • mail -s “meus arquivos” admin < diretorio
Monitorando Processos • O comando ps informa: • PID, UID, prioridade e terminal de controle • Tempo de CPU, memória utilizada, etc. • Exemplo: % ps -aux /* System V: ps -ef */ USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND root 137 5.5 0.0 3832 2140 co O 8:38PM 5:38.12 ps - marcio 155 3.0 0.0 172 16 p0 S 8:38PM 0:00.00 /usr/bin/csh root 0 0.0 0.0 0 0 ?? T 8:35PM 0:00.06 sche ...
Monitorando Processos Campo Significado USER Nome do usuário dono do processo PID Process ID %CPU Porcentagem da CPU que o processo está usando Porcentagem da memória real sendo utilizada %MEM Tamanho virtual do processo (kb) SZ RSS Número de páginas (1K) na memória TT ID do terminal de controle STAT Status corrente do processo: R - Runnable D - In disk wait S - Sleeping (>20) I - Sleeping (<20 sec) T - Stopped Z - Zombie START Hora que o processo foi inicializado TIME Tempo de CPU que o processo consumiu Nome do comando e argumentos COMMAND
ps - opções comuns • a seleciona todos, com a tty exceto líderes a mostra processos de outros usuários • e seleciona todos os processos e mostra ambiente após comando h mostra sem cabeçalho • l mostra em formato longo r somente processos rodando x processos sem controle de terminal u fornece informações sobre usuário f mostra formato de árvore
Exemplos ps • ps -ef • ps -aux • ps -auxl
Monitorando Processos • O programa top (integra alguns UNIX): • Provê um resumo dos processos ativos e do uso dos recursos; • Amostragem a cada dez segundos (default); • Permite enviar sinais (k); • Permite visualizar processos de um usuário (u); • Permite modificar a prioridade dos sinais (r); • top é de autoria de William LeFebvre, EECS Department, Northwestern University.
Monitorando Processos % top last pid: 26330; load averages: 0.01, 0.01, 0.00 20:29:51 80 processes: 1 running, 79 sleeping CPU states: 0.4% user, 0.0% nice, 0.4% system, 1.6% interrupt, 97.7% idle Mem: 29M Active, 6204K Inact, 14M Wired, 8904K Cache, 6386K Buf, 3660K Free Swap: 128M Total, 34M Used, 94M Free, 27% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 227 root 2 0 1096K 80K select 0:46 0.00% 0.00% httpd 26330 marcio 28 0 644K 832K RUN 0:00 0.00% 0.00% top 26323 marcio 18 0 688K 1020K pause 0:00 0.00% 0.00% csh 18256 root 18 0 484K 516K pause 0:40 0.00% 0.00% office51 155 root 18 0 332K 268K pause 0:06 0.00% 0.00% cron 6061 marcio 10 0 380K 144K wait 0:00 0.00% 0.00% make 6067 marcio 10 0 488K 140K wait 0:00 0.00% 0.00% sh 6038 marcio 10 0 488K 140K wait 0:00 0.00% 0.00% sh • Exemplo:
Sinais para Processos • Interrompem a execução do processo • Enviados através do comando kill • # kill -HUP 1823 • O processo • Quando recebe, trata o sinal ou então o kernel toma alguma ação default • É reiniciado do ponto onde parou
Alguns sinais • SIGKILL (9): • Destrói o processo $ kill -9 1889 • SIGSTOP: • Suspende até receber SIGCONT $ kill -s STOP 2102 • SIGHUP (1): • Faz o programa reler o seu arquivo de configuração • É interessante enviá-lo antes de um kill -9 $ kill -1 2100
Alguns sinais • SIGTERM (15): • Terminação de processo por programa # kill -15 1889 • SIGCONT: • Continua após receber SIGSTOP $ kill -s CONT 2102 • SIGHUP (1): • Faz o programa reler o seu arquivo de configuração. É interessante enviá-lo antes de um kill -9 $ kill -1 2100 (#man -s5 signal)
Agendando tarefas no Unix - at • Permite agendar tarefas em tempos determinados • Pode ser usado por qualquer usuário, se não houver restrições (arquivo /etc/at.deny) • at 1:23 • lp /usr/vendas/relats/* • echo “Arquivos sendo impressos” | mail -s “Tudo ok” gerente
Agendando tarefas - at cont • at now + 1 DAY • rm -f -r *.txt • echo “Removi arquivos texto” | mail adriano • <ctl>D • at 17:00 DECEMBER 24 • mail all < feliz_natal.txt • <ctl>D
Agendando tarefas - at cont • Resumo do comando • At hh:mm • Agenda tarefas para a hora marcada • at hh:mm mes dia ano • Agenda tarefas para hora:min mes dia ano • at -l • Lista os servi₤os agendados • at now + inteiro unidades • Agenda para daqui a inteiro unidades (MONTH, DAY, etc) • at -d id_seviço
Agendando tarefas - cron • at é usado para agendar tarefas uma vez • cron usado para agendar tarefas em bases regulares • cron começa quando o sistema é inicializado • Se não há nada para fazer cron fica inativo e verifica a cada minuto se há tarefas para serem executadas nos arquivos crontab
Agendando tarefas - crontab crontab [-u user] file • crontab: Comando usado para incluir tarefas na agenda • crontab -u adriano file • Deve ser usado no primeiro agendamento para criar o arquivo crontab do usuário adriano a partir de file • Este arquivo será armazenado em /var/spool/cron
Agendando tarefas - crontab crontab [-u user] {-l | -r | -e} • crontab: opções usadas depois que o crontab é criado • l lista o crontab atual • r remove o crontab atual • e edita o arquivo atual usando o editor especificado na variável EDITOR ou VISUAL
Agendando tarefas - crontab cont • Sintaxe dos comandos a serem inseridos no crontab min hora dia-do-mês mês-do-ano dia-semana comando • Todos os 5 campos de data precisam aparecer • Campos com * são ignorados • Formatos • Min 00 até 59 • Hora 00 até 23 • Dia do mês 01 até 31 • Mês do ano 01 até 12 • Dia da semana 01 até 07 (segunda 01)
Agendando tarefas - exemplos • 30 07 * * 01 sort ./vendas/semanal | mail gerente • 07:30 h, todo dia do mês, todo mês as segundas envia relatório de vendas ordenado para gerente • 45 10 * * 1-5 mail -s “Hoje é um dia útil” adriano • 10:45 h, todo dia do mês de segunda a sexta avisa que é dia útil • 0,30 * 13 * 5 ls -l • Toda meia hora às sextas e todas meias horas do 13 dia do mês executa um ls -l e envia o resultado como mail para o usuário • 20 1 * * * find /tmp -atime + 3 -exec rm -f “{}” \; • 1:20 remove todos os arquivos de /tmp que não foram acessados nas últimas 72 horas.
Nice Value • Quanto menor seu valor, maior a prioridade • BSD: -19 a 19 • System V: 0 a 39 • Processos recém-criados herdam o valor do pai; • O comando nice estabelece o valor na criação do processo;
Nice Value • O dono do processo pode alterar este valor via comando renice (BSD) • Quando necessário, usá-lo para iniciar um shell com alta prioridade • Exemplo: % ps -l UID PID PPID CPU PRI .... STAT TT TIME COMMAND 19442 1662 972 3 28 R+ p2 0:00.01 ps -l % nice -20 ps -l 19442 1668 972 3 68 RN p2 0:00.01 ps -l