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


    1. Mude o tempo do sleep do processo pai
    2. Use o comando ps-aux
    3. Finalizar o processo pai
    4. 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