Gestão de processos
- 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]
- 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.
- 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?
- 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ê?
- 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]
- 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.
- 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ê?
- 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.
- 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]
- 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.
- 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.
- 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.
- Faça um programa que crie um processo filho para executar
o comando ‘ ls -l’ (usando funções exec).
[Resolução]
- 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