Esercitazione Venerdi 30 Ottobre 2009

 

Per usare funzioni e tipi sui processi usare le librerie:

#include <unistd.h>

#include<sys/types.h>

 

fork: creazione di un nuovo processo figlio (copia del padre, condivide file aperti)

execve, execv, execl,execlp,… : esecuzione di un nuovo programma nel contesto del processo corrente (non crea figli!), il nuovo processo eredita file aperti

getpid: pid del processo corrente

getppid: pid del padre

wait/waitpid: usate dal padre per aspettare la terminazione del figlio

 

Quando il processo padre non invoca la chiamata di sistema wait, il processo zombie continua a rimanere nella tabella dei processi:

Quando un processo perde il proprio processo padre divenendo orfano, il processo init (pid=1) ne diventa automaticamente il nuovo processo padre.
Il processo init (pid=1) esegue periodicamente la chiamata di sistema wait terminando i propri processi figli zombie.

I processi zombie potenzialmente inutili sono generati  quindi da genitori che che non eseguono wait/waitpid proseguendo
(per un certo tempo) la loro esecuzione

 

Esercizio 1

Verificare (usando fork, getpid, getppid, e messaggio a video) che un processo Linux rimasto orfano
viene adottato dal processo init  (pid=1).

 

Esercizio 2
Scrivere un programma che genera un processo zombie (verificare tale evento tramite messaggi a video) (per info sui processi zombie vedi commento.

Esercizio 3

Scrivere per verificare che i file aperti (e quindi la posizione corrente) vengono ereditati dai processi generati tramite fork.

Esercizio 4

Scrivere un programma C che prende come parametri N comandi e li esegue in N diversi sotto-processi generati tramite fork.

Fare in modo che il processo padre attenda la terminazione di ognuno dei figli prima di terminare la propria esecuzione

 (utilizzare stampe a video per verificare i vari passi).

 

Esercizio 5

Scrivere un programma C che usa fork ed exec per creare due processi concorrenti, non sincronizzati, senza correre

il rischio di lasciare processi zombie potenzialmente inutili (si possono pero’ generare orfani).