SISTEMAS OPERACIONAIS
manipulando processos
Professora Marcela Santos
profmarcelasantos@gmail.com
informações sobre os processos
Quando um programa esta sendo executado, ele e 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
maquina o PID sera unico
Parent Process Identification - PPID
funções
getpid()
Sintaxe: pid_t getpid()
Descrição: retorna o identificador do processo que chamou a função
getppid()
Sintaxe: pid_t getppid()
Descrição: retorna o identificador do processo pai do processo que chamou a função
funções
Atividade guiada
Baixa o programa exemplo1.c
criação de processos
O processo
init
é criado no momento do boot do sistema
Com exceção dele todos os outros processos são criados a partir da função interna do kernel
fork()
A função
fork()
duplica o processo que a chamou
Processo pai: processo que chamou a função
Processo filho: novo processo criado a partir do processo pai
criação de processos
função fork
Sintaxe
pid_t fork(void)
0 : o processo filho está sendo executado
-1: ocorreu um erro na criação do processo
>0: o processo pai está sendo executado e o valor de retorno representa o PID do processo filho
função fork
Atividade guiada
Baixe o programa exercicio2.c
Baixe o programa exercicio3.c
Analisando o programa exercicio3.c
Mude o tempo do sleep do processo pai
Use o comando ps-aux
Finalizar o processo pai
Faça os passos 1,2 e 3 para o processo filho
sincronização de processos
O processo pai pode esperar o termino de um processo filho através da chamada da função
wait
A função wait ira retornar o status de retorno de qualquer
processo filho que termine.
sincronização de processos
O processo que chamar a função
wait
terá um desses seguintes comportamentos:
Bloquear sua execução ate o termino de algum processo filho
Retornar imediatamente com o status de termino de um processo filho caso o filho já tenha terminado
Erro caso não se tenha nenhum processo filho rodando
a função wait
Sintaxe
pid_t wait(int *stat_loc)
Retorno
PID do processo que terminou
Status do término
a função wait
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
a função wait
Atividade guiada
Baixe o arquivo exemplo4.c
Esperando por um Processo
O Pai só morre após a morte de um Filho
Pai suspende sua execução e só retorna quando recebe um sinal vindo de um de seus filho
indicando a morte deste.
E se o Processo Filho já estiver morto?
a função wait
Processo Zumbis
Quando o Filho morre antes do Pai, ou quando o Pai não está esperando (wait), ele se torna um processo zumbi
Processo Zumbi.
Mude o programa exemplo1.c,
faça o Filho terminar antes do Pai.
Execute o comando ps antes do Pai terminar e tente matar o Filho com o comando kill <pid>.
Execute o comando ps após a morte do Pai.
Made with Slides.com