Manipulação de Processos
Informação complementar:
Esta aula tem por objetivo introduzir as operações básicas de
manipulação de processos em ambientes Linux. 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 respetivas.
- Criar um novo processo: o programa deve criar um processo
filho e ambos os processos (pai e filho) devem imprimir o seu
PID
, PPID
e UID
.
Funções
a ter em conta: fork()
, getpid()
,
getppid()
e getuid()
.
- Criar uma descendência directa de dois processos: o
programa deve criar dois processos filho do processo
original. Cada processo filho deve escrever o seu
PID
e o PID
do processo pai.
- Criar uma descendência directa de N processos: generalize o
programa anterior para que sejam criados N processos filho
do processo original. O número N deverá ser passado como
parâmetro da linha de comandos. 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.
- 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()
.
- Esperar pela terminação do filho: o programa deve criar um
processo filho que deverá calcular a diferença entre o
seu
PID
e o PID
do pai, enviando o
resultado desse cálculo ao processo pai. O processo pai deve
esperar que o processo filho termine e imprimir o valor que lhe
foi comunicado pelo filho. Comente a versatilidade e limitações da
solução encontrada.
Funções a ter em conta: exit()
e wait()
.
Sugestão: consulte a man-page da
função wait()
, com particular ênfase na parte
relativa a macros associadas a essa função.