Gestão de processos


  1. Faça um programa que crie um processo. O processo pai deverá imprimir: "Eu sou o processo pai, o meu PID é X.". O processo filho deverá escrever: "Eu sou o processo filho, o meu PID é Y e o meu PPID é Z".
    [Resolução]
  2. Faça um programa que crie um processo, o processo deve imprimir os seus PID e PPID, deve esperar que o pai morra e voltar a mostrar os seus PID e PPID.
  3. Dado um programa que tem uma variável definida i e inicializada com o valor 3. Se este programa criar um processo filho e este processo alterar o valor de i para 5. Qual o valor de i a partir desse momento no processo pai?
  4. Crie um programa que abra um ficheiro texto para leitura, de seguida crie um filho e ambos devem ler dados do ficheiro e imprimir. O que acontece? Porquê?
  5. Crie um programa que crie um processo filho. O filho deverá calcular o factorial de um número e o processo pai deve esperar que o filho termine antes de terminar.
    [Resolução]
  6. Suponha que, sempre que recebe e-mail é criado um ficheiro na sua área com o nome "mailbox". Crie um programa que execute em background e verifique cada 30 segundos se o ficheiro existe. Caso exista, mostra uma mensagem ou dá um sinal sonoro.
  7. Crie um programa que crie 4 filhos e que espere que todos acabem. Cada filho deverá "dormir" por um período aleatório de tempo e depois sair. Qual é a ordem de saída dos filhos e porquê?
  8. Faça um programa que crie um processo e:

    O processo filho escreve os números 1 .. 500.
    O filho quando terminar, "retorna" o valor 5.
    O processo pai escreve os números 501 .. 1000.
    O pai só deve terminar quando o filho terminar e tem de escrever o "valor de saída" do filho.

  9. Tendo um array de inteiros com mil posições, crie um processo e faça o seguinte:

    Os dois processos (pai e filho) fazem o seguinte cálculo: resultado[i] = dados[i]*4 + 20.
    Cada processo é responsável pelo cálculo de 500 posições do array dados, colocando o resultado no array resultado.
    Os resultados devem ser apresentados segundo a ordem do array (de 0 a 499 e depois de 500 a 999).
    [Resolução]

  10. Faça uma função que recebe como parâmetros:

    dados - um array de inteiros com 1000 posições.
    inicio - um inteiro.
    Resultado - um array de inteiros com 1000 posições.
    A função calcula : resultado[i] = dados[i]*4 + 20, de inicio até inicio + 499.

    Utilize a função para resolver o problema do exercício anterior.

  11. Faça um programa que crie 5 processos e cada processo escreve 200 números:

    1º processo: 1 .. 200
    2º processo: 201 .. 400
    3º processo: 401 .. 600
    4º processo: 601 .. 800
    5º processo: 801 .. 1000

    O processo pai tem de esperar que todos os processos filho terminem.

  12. Tendo um array de 1000 posições, faça um programa que crie 5 processos e dado um número, procure esse número no array.

    Cada processo filho, procura 200 posições.
    O processo que encontrar o número, deve imprimir a posição do array onde se encontra. Também deve "retornar" como valor de saída o número do processo (1, 2, 3, 4, 5).
    Os processos que não encontrarem o número devem "retornar" como valor de saída o valor 0.
    O processo pai tem de esperar que todos os filhos terminem e imprimir o número do processo onde esse número foi encontrado (1, 2, 3, 4, 5).

    Nota: O array não tem números repetidos.

  13. Faça um programa que crie um processo filho para executar o comando ‘ ls -l’ (usando funções exec).
    [Resolução]
  14. Faça um programa que simule uma shell (interpretador de comandos). O programa só termina quando se introduz o comando sair. Só deve aceitar outro comando quando o comando que está a ser executado terminar. Complemente o exercício permitindo a passagem de argumentos aos comandos a executar e permitindo o uso de & para enviar um comando para "background". 

Voltar

ISEP 2003
HTML Válido