Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Marco Lapegna » 19.Esercitazione 1: I Processi


Primitive per la gestione dei processi

Unix fornisce le primitive per la creazione e terminazione di processi, e per l’esecuzione di programmi:

  • fork crea nuovi processi;
  • exec attiva nuovi programmi;
  • exit termina un processo.
  • wait attende la terminazione di un processo.

Funzione fork

  • L’unico modo per istruire il kernel a creare un nuovo processo è di chiamare la funzione fork da un processo esistente.
  • Il processo creato viene detto figlio. Il processo che chiama fork viene detto genitore
  • Il figlio è una copia del genitore (data space, heap e stack), cioè essi non condividono parti di memoria.

Funzione fork

La funzione fork ritorna:

  • l’identificativo del figlio nel processo genitore
  • 0 nel processo figlio

Genitore e figlio riprendono l’esecuzione dall’istruzione successiva al fork

Funzione fork


Come differenziare il padre dal figlio?


Esempio (esecuzione)


Identificativi dei processi

Queste funzioni ritornano gli identificativi di processo.


Esempio


Esempio (esecuzione)


Esercizio

Quanti processi vengono generati?


Esecuzione

8 processi !!!


Infatti

In generale 2n processi !!!


Funzione exit

  • exit termina un programma normalmente e libera le risorse
  • La funzione ha per argomento un intero che rappresenta il valore di ritorno del programma

Tale valore non è definito quando:

  1. la funzione viene chiamata senza argomento,
  2. se il programma termina prima del dovuto.

Comunicazione padre – figlio

  • Un figlio che termina normalmente comunica al genitore il suo valore di uscita mediante l’argomento della funzione exit
  • Nel caso di terminazione non normale, il kernel genera uno stato di terminazione per indicare la ragione.

Comunicazione padre – figlio

  • Se il genitore termina prima del figlio, il processo init eredita il figlio e il parent process ID di questo diventa 1.
  • Se il figlio termina prima che il genitore sia in grado di controllare la sua terminazione, il kernel conserva almeno il process ID e lo stato di terminazione.
  • Tali processi vengono detti zombie.

Esempio


Esempio

Il processo padre termina prima del figlio, il quale diventa zombie


Funzione wait

Il genitore è in grado di ottenere lo stato di terminazione di un figlio mediante la funzione wait

L’argomento statloc é un puntatore ad un intero.

In tale intero sono codificati:

  • lo stato di terminazione
  • il valore di ritorno del processo figlio (comunicato da exit)

Funzione wait

La funzione wait sospende il processo genitore finché:

  • il figlio ha terminato la propria esecuzione, oppure
  • riceve un segnale

Esempio: Shell e main

  • un programma C eè un insieme di funzioni che si richiamano l’un l’altra
  • una (e solo una) deve chiamarsi main, ed è la funzione dalla quale inizia l’esecuzione
  • la shell crea un nuovo processo per ogni comando che riceve
  • la shell passa gli argomenti alla funzione main e da essa riceve i valori di ritorno

Shell e processi


Stato di terminazione

Le macro definite in <sys/wait.h> interrogano la variabile status

Macro

  • WIFEXITED(status)
    • vero se il figlio è terminato normalmente -> WEXITSTATUS ritorna lo stato
  • WIFSIGNALED(status)
    • vero se il figlio è uscito per un segnale -> WTERMSIG ritorna il segnale
  • WIFSTOPPED(status)
    • vero se il figlio è fermato -> WSTOPSIG ritorna il segnale

Esempio

Continua nella slide successiva.


Esempio


Esempio


Funzione execl

  • La funzione execl sostituisce il codice e i dati del programma in esecuzione con il codice e i dati di un nuovo programma all’interno dello stesso processo
  • L’identificativo del nuovo processo è lo stesso di quello sostituito.

Esempio

Programma “hello”

Continua nella prossima slide.


Esempio


Esempio (esecuzione)


Prossima lezione

Esercitazione 2: I thread

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93