Manipulação de processos



Documentos relacionados
Processos em Unix. Conteúdo: Definição de Processos em Unix Estrutura, tipo e escalonamento de processos em Unix Processos, Pai, Filho e Zumbi.

Tratamento de Sinais

Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid


Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Analise o código abaixo:

SVCs para Controle de Processos no Unix. Sistemas Operacionais

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo.

Memória compartilhada

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Sistemas Operacionais INF Prof. José Gonçalves

Técnicas Avançadas de Programação

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

Sistemas Operacionais

Criação de Processos Fork( ) Exec( )

Complementos de Programação. Engenharia Electrotécnica - Electrónica e Computadores. Ano Lectivo: 2005/2006. Ana Madureira. Gestão de Processos

SVCs para Controle de Processos no Unix

Algoritmos e Programação Estruturada

PROCESSOS. Prof. Maicon A. Sartin

INSTITUTO SUPERIOR DE CIÊNCIAS DO TRABALHO E DA EMPRESA. Filas de mensagem

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Programação Estruturada I

3. Criação e terminação de processos

Resumo da Matéria de Linguagem de Programação. Linguagem C

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Algoritmos e Programação

SVCs para Controle de Processos no Unix

! Os primeiros computadores permitiam a execução de apenas um programa de cada vez, com acesso completo aos recursos do sistema

SSC0640 Sistemas Operacionais I

Introdução à Programação Aula 07. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Sistemas Operacionais

Sistemas de Computação

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Processos. (c) 2005 Volnys B. Bernal Versão de 15/3/2006. Agenda. Processos. Introdução aos Processos. Introdução aos Processos

Leandro Soares de Sousa (DSc.) Página: Aula 03 Revisão e Conceitos C e Unix

LABORATÓRIO SISTEMAS OPERACIONAIS

Sistemas Operacionais Abertos. Prof. MSc. André Yoshimi Kusumoto

Comunicação entre pai e filho

Introdução a PHP (Estruturas de Controle)

PROCESSOS COMPONENTES DE UM PROCESSO. A execução de um processo possui vários componentes. PID e PPID

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Processos. Sistemas Operativos 2015 / Multiprogramação. Execução, em paralelo, de múltiplos programas na mesma máquina

Infra-Estrutura de Software. Introdução. (cont.)

Sistemas Operativos. (ano letivo ) Laboratório 2

Sinais. Sinais e fork. Sinais e exec. Segunda aula. Chamada ao sistema fork Chamada ao sistema execve. José Pedro Oliveira

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa.

Sistemas de Operação (2018/2019) Teste de Auto-Avaliação Prática

Processos. Conceitos Básicos

1 System Calls no Linux

Na Aula Anterior... Interrupções por software e hardware; Temporizadores; RTC; Temporizadores via software. Relação Processos Multiprogramação

6. Comunicação entre processos - Pipes

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Conceitos Básicos

2 SYSCALLs: O que são

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

LABORATÓRIO SISTEMAS DE TEMPO REAL

Comandos Sequenciais if else, e Switch

Processos. Conceitos Básicos

INTRODUÇÃO À LINGUAGEM C++

Linguagem de Programação C. Comandos de Seleção e Desvio

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Carlos Eduardo Batista Centro de Informática - UFPB

Curso de Linguagem C

Módulo 3 Controle de Fluxo

Linguagem de Programação C. Prof. Fabrício Olivetti de França

struct LISTA item quant

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Operadores unários de incremento/decremento. Ciclo for

Trabalhando com Processos e Threads em Ambiente LINUX

Introdução. O que vimos. Infraestrutura de Software. (cont.) História dos Sistemas Operacionais. O que vimos 12/03/2012. Primeira geração:

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

José Romildo Malaquias

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

SISTEMAS OPERACIONAIS

Algoritmo e Técnica de Programação - Linguagem C

Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM

7. Estrutura de Decisão

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Fundamentos de Programação 1

Capítulo 7. Estruturas de Decisão. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

TE091 Programação Orientada a Objetos Engenharia Elétrica

Sistemas Operativos: Processos

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Resumo da Introdução de Prática de Programação com C. A Linguagem C

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

Sistemas Operacionais

Transcrição:

Manipulação de processos Luiz Affonso Guedes 1 Ivanovitch Silva 1 affonso@dca.ufrn.br ivan@dca.ufrn.br 1 Universidade Federal do Rio Grande do Norte 17 de setembro de 2009 Processos DCA0109 1 / 18

Sumário 1 Gerenciamento de processos Propriedades do processo Funções getpid e getppid Exemplo 01 2 Criação de processos Função fork Exemplo 02 Exemplo 03 Desafio 1 3 Sincronização de processos Função wait Exemplo 04 4 Chamando funções do SO Função system Exemplo 05 Processos DCA0109 2 / 18

Sumário 1 Gerenciamento de processos Propriedades do processo Funções getpid e getppid Exemplo 01 2 Criação de processos Função fork Exemplo 02 Exemplo 03 Desafio 1 3 Sincronização de processos Função wait Exemplo 04 4 Chamando funções do SO Função system Exemplo 05 Processos DCA0109 3 / 18

Propriedades do processo Informações sobre os processos Quando um programa está sendo executado, ele é considerado um processo e ocupa um espaço dentro de gerenciador de processos. Precisamos encontrar uma maneira de identificar o processo. Process Identification - PID SO garante que enquanto o processo estiver ativo na máquina o PID será único Parent Process Identification - PPID Processos DCA0109 3 / 18

Funções getpid e getppid Funções getpid e getppid Sintaxe: pid t getpid (void) Descrição: Retorna o PID do processo. Sintaxe: pid t getppid (void) Descrição: Retorna o PID do criador do processo. Processos DCA0109 4 / 18

Exemplo 01 Exemplo 01 - Funções getpid() e getppid() Download 1 //Compilar: g++ -o nomeexecutavel nomedoarquivo.cpp 2 //Executar:./nomeExecutavel 3 4 #include <stdio. h> 5 #include <s t d l i b. h> 6 #include <unistd. h> 7 8 int main (int argc, char argv [ ] ) { 9 //Identificador do criador do processo (pai) 10 p i d t i d P a i ; 11 //Identificador do processo 12 p i d t idprocesso ; 13 //Obtendo o identificador do pai 14 i d P a i = getppid ( ) ; 15 //Obtendo o identificador do processo 16 idprocesso = getpid ( ) ; 17 printf ( PID :\ t %d \nppid:\ t %d \n, idprocesso, idpai ) ; 18 exit ( 0 ) ; 19 } Processos DCA0109 5 / 18

Sumário 1 Gerenciamento de processos Propriedades do processo Funções getpid e getppid Exemplo 01 2 Criação de processos Função fork Exemplo 02 Exemplo 03 Desafio 1 3 Sincronização de processos Função wait Exemplo 04 4 Chamando funções do SO Função system Exemplo 05 Processos DCA0109 6 / 18

Criação de processos no sistema operacional Com exceção do processo init, que é criado no boot da máquina, todos os demais processos são criados através da função interna do kernel chamada fork A função fork duplica o processo atual Processo que chamou a função fork é chamado de processo pai O novo processo criado pela função fork é chamado de processo filho Processos DCA0109 6 / 18

Fork - visão geral Processo pai fork() Processo pai Processo filho Processos DCA0109 7 / 18

Função fork Função fork Sintaxe: pid t fork (void) Retorno: 0 - o processo filho está sendo executado >0 - o processo pai está sendo executado. O valor retornado representa o PID do processo filho -1 - erro Processos DCA0109 8 / 18

Exemplo 02 Exemplo 02 - Função fork Download 1 //Compilar: g++ -o nomeexecutavel nomedoarquivo.cpp 2 //Executar:./nomeExecutavel#include <sys/types.h> 3 4 int main (){ 5 // Identificador do processo 6 p i d t idprocesso ; 7 printf ( I n i c i a n d o o programa\n ) ; 8 // Criando o processo 9 idprocesso = fork ( ) ; 10 switch ( idprocesso ){ 11 case 1: // erro na abertura do processo filho 12 exit ( 1 ) ; 13 case 0: // retorno de fork para processo filho 14 printf ( Sou o processo f i l h o ID : %d, pai ID : %d\n, getpid ( ), getppid ( ) ) ; 15 break ; 16 default : 17 printf ( Sou o processo pai com ID : %d, pai ID : %d, f i l h o ID : %d\n, 18 getpid ( ), getppid ( ), idprocesso ) ; 19 break ; 20 } 21 exit ( 0 ) ; 22 } Processos DCA0109 9 / 18

Exemplo 03 Exemplo 03 - Função fork Download 1 //Compilar: g++ -o nomeexecutavel nomedoarquivo.cpp 2 //Executar:./nomeExecutavel 3... 4 idprocesso = fork ( ) ; 5 switch ( idprocesso ){ 6 case 1: // erro na abertura do processo filho 7 exit ( 1 ) ; 8 case 0: // retorno de fork para processo filho 9 for ( int i =0; i <10; i ++){ 10 printf ( Sou o processo f i l h o ID : %d\n,getpid ( ) ) ; 11 sleep ( 5 ) ; 12 } 13 break ; 14 default : // retorno de fork para processo pai 15 for ( int i =0; i <10; i ++){ 16 printf ( Sou o processo pai ID : %d\n,getpid ( ) ) ; 17 sleep ( 5 ) ; 18 } 19 break ; 20 } 21 printf ( O processo com ID : %d f i n a l i z o u!!!! \ n,getpid ( ) ) ; 22 exit ( 0 ) ; 23... Processos DCA0109 10 / 18

Exemplo 03 Exemplo 03 - Função fork Analisar o exemplo 03 1 Mudar o tempo de sleep do processo pai para 2s 2 Investigar os processos através do comando ps -aux 3 Finalizar o processo pai (kill -9 pidpai). Verificar o comando ps -aux. 4 Fazer o mesmo procedimento do passo 3 para o processo filho. Processos DCA0109 11 / 18

Desafio 1 Estrutura do problema Pai fork() Pai Filho1 fork() fork() Pai Filho2 Filho1 Neto1 fork() Filho2 Neto2 Processos DCA0109 12 / 18

Desafio 1 Descrição do problema 1 ano corresponde a 1 segundo. O pai morre aos 60 anos. O pai tem um filho aos 14 anos. O pai tem outro filho aos 16 anos. O pai é avô aos 26 anos (primeiro filho). O pai é avô novamente (segundo filho) aos 30 anos. O primeiro e o segundo filhos morrem ambos aos 30 anos. O primeiro neto morre aos 12 anos enquanto que o segundo morre aos 18 anos. Processos DCA0109 13 / 18

Sumário 1 Gerenciamento de processos Propriedades do processo Funções getpid e getppid Exemplo 01 2 Criação de processos Função fork Exemplo 02 Exemplo 03 Desafio 1 3 Sincronização de processos Função wait Exemplo 04 4 Chamando funções do SO Função system Exemplo 05 Processos DCA0109 14 / 18

Função wait Esperando um término de um processo O processo pai pode esperar o término de um processo filho através da chamada da função wait A função wait irá retornar o status de retorno de qualquer processo filho que termine. O processo que chamar a função wait terá um desses seguintes comportamentos: Bloquear sua execução até o término de algum processo filho Retornar imediatamente com o status de término de um processo filho caso o filho já tenha terminado Erro caso não se tenha nenhum processo filho rodando Processos DCA0109 14 / 18

Função wait Função wait Sintaxe: pid t wait (int *stat loc) Retorno: PID do processo que terminou Status que provocou o término do processo Macros auxiliares: WIFEXITED(stat loc) - retorna verdadeiro caso o processo filho tenha terminado normalmente WIFSIGNALED(stat loc) - retorna verdadeiro caso o processo filho tenha terminado através do recebimento de um sinal WEXITSTATUS(stat loc) - se finalizou normalmente, retorna o código de finalização WTERMSIG(stat loc) - se finalizou por causa de um sinal, retorna o código do sinal Processos DCA0109 15 / 18

Exemplo 04 Exemplo 04 - Função wait Download 1... 2 //Varaiaveis usadas para modelar o problema 3 int idprocesso ; 4 int statusretorno ; 5 int cont = 0; 6 //Criando o processo 7 idprocesso = fork ( ) ; 8 if ( idprocesso < 0) exit ( errno ) ; 9 if ( idprocesso!= 0){ //Processo pai 10 //Espera bloqueante pela morte do filho 11 wait (& statusretorno ) ; 12 if (WIFEXITED ( statusretorno ) ) 13 printf ( Finalizou normalmente : %d\n, WEXITSTATUS ( statusretorno ) ) ; 14 else if (WIFSIGNALED ( statusretorno ) ) 15 printf ( Cancelado por um sinal : %d\n, WTERMSIG ( statusretorno ) ) ; 16 } 17 if ( idprocesso == 0){ //Processo filho 18 while ( cont < 10){ 19 printf ( Processo f i l h o : %d\n, getpid ( ) ) ; 20 sleep ( 2 ) ; 21 cont ++; 22 } 23 exit ( 1 ) ; 24 } 25 exit ( 0 ) ; Processos DCA0109 16 / 18

Sumário 1 Gerenciamento de processos Propriedades do processo Funções getpid e getppid Exemplo 01 2 Criação de processos Função fork Exemplo 02 Exemplo 03 Desafio 1 3 Sincronização de processos Função wait Exemplo 04 4 Chamando funções do SO Função system Exemplo 05 Processos DCA0109 17 / 18

Função system Chamando funções do SO dentro do programa Sintaxe: int sytem (const char *command) Retorno: 0 - o comando foi executado com sucesso -1 - se não foi possível executar o fork código - se não foi possível executar o exec Processos DCA0109 17 / 18

Exemplo 05 Exemplo 05 - Função system Download 1 //Compilar: g++ -o nomeexecutavel nomedoarquivo.cpp 2 //Executar:./nomeExecutavel 3 4 #include <s t d l i b. h> 5 #include <stdio. h> 6 7 int main (){ 8 printf ( I n i c i o \n ) ; 9 printf ( F i n a l i z o u com o seguinte codigo : %d\n,system ( l s l a ) ) ; 10 exit ( 0 ) ; 11 } Processos DCA0109 18 / 18