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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.