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.
Sistemas Operacionais - Manipulando Processos
By Marcela Santos
Sistemas Operacionais - Manipulando Processos
- 1,373