Sistemas de Operação

Aula Prática 2

Ano Lectivo de 2002/2003


Criação de Processos

Esta aula tem por objectivo familiarizá-lo com as operações básicas de manipulação de processos em ambientes UNIX: criação, terminação, relação com outros processos, o estado do processo, etc.

Para tal, deverá implementar pequenos programas que respondam aos requisitos de cada uma das tarefas que se seguem. Para obter mais informação sobre as funções de sistema referidas, consulte as man-pages correspondentes.

  1. Identificar o processo: o programa deve imprimir o PID, o PPID e UID do processo que executa o programa. Funções a ter em conta: getpid, getppid e getuid.
  2. Criar um novo processo: o programa deve criar um processo filho e ambos os processos (pai e filho) devem calcular e escrever os números de Fibonacci entre 20 e 30. Funções a ter em conta: fork.
  3. Criar uma descendência directa de N processos: o programa deve criar N processos filho do processo original. Cada processo filho deve escrever o seu PID e o PID do processo pai.
  4. Criar uma série de N processos: o programa deve criar uma série de N processos, em que cada processo p cria o processo p+1. Por exemplo, para N=4, o 1º processo da série cria o 2º, o 2º cria o 3º e o 3º cria o 4º. Cada processo deve escrever o seu PID e o PID do processo pai.
  5. Sincronizar processos: o programa deve criar um processo filho que calcula o número de Fibonacci de ordem 10 e que termina enviando esse cálculo como sinal ao processo pai. O processo pai deve esperar que o processo filho termine, apanhar o sinal enviado e escreve-lo. Funções a ter em conta: exit e wait.
  6. Criar um processo para executar um dado comando: o programa deve criar um processo filho para executar o comando ls -l. Funções a ter em conta: família de funções exec.
  7. Criar um processo zombie: o programa deve criar um processo filho que termina de imediato. O processo pai deve adormecer durante 10 segundos e só depois terminar. Enquanto o processo pai está adormecido abra uma nova shell e execute o comando ps -e -o pid,ppid,stat,cmd de modo a verificar o estado do processo filho. Funções a ter em conta: sleep.
  8. Criar processos em background (se executarem indefinidamente chamam-se daemons): o programa deve criar um processo filho que vai executar em background o cálculo do Fibonacci de ordem 40 e escreve o resultado para um ficheiro fib. O processo pai deve adormecer durante 10 segundos e só depois terminar. De modo a verificar se o processo filho se tornou independente do processo pai, termine a shell respectiva enquanto o processo pai está adormecido e verifique se o ficheiro fib contém o resultado esperado. Funções a ter em conta: setsid, open, write e close.
  9. Criar um biff (programa que sinaliza a chegada de correio): supondo que o seu correio aparece num ficheiro na sua área e com o seu nome, o programa deve verificar da existência do ficheiro no caminho indicado, e caso exista deve emitir um beep (caracter '\a'). Se o ficheiro não existe não faz nada. O programa deve executar indefinidamente em background (daemon) e verificar da existência do ficheiro a cada 10 segundos.
Atenção: não se esqueça de eliminar os processos em background. Use ps para descobrir o PID dos processos em background, e depois use kill -9 seguido dos PID encontrados para os eliminar.