Fork (programmazione)Una fork in programmazione è la modalità attraverso cui un processo crea in memoria una copia di se stesso: la copia prenderà il nome di processo figlio, mentre il processo originale verrà chiamato processo padre. Nei sistemi operativi UNIX e Unix-like il processo padre ed il processo figlio possono scegliere le istruzioni da eseguire tramite il valore di ritorno della chiamata di sistema Quando un processo effettua la chiamata Importanza della fork() in UnixLa $ find . -name "*.cpp" -print | wc -l
Per fare ciò la shell effettua una Più in generale, una EsempioQuesto è un esempio in Linguaggio C che illustra l'idea del forking in ambiente Unix-like: #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int pid; //pid_t pid;
pid = fork();
if(pid == 0)
{
/* Processo figlio.
* Se fork() ritorna 0, siamo all'interno
* del processo figlio
* Conteremo fino a dieci, una volta al secondo.
*/
int j;
for(j=0; j < 10; j++)
{
printf("Figlio: %d\n", j);
sleep(1);
}
_exit(0); /* Notare che non viene usata la exit() */
}
else if(pid > 0)
{
/* Processo padre, la fork ha restituito
* il pid del figlio appena creato.
* Contiamo ancora fino a dieci.
*/
int i;
for(i=0; i < 10; i++)
{
printf("Padre: %d\n", i);
sleep(1);
}
}
else
{
/* Errore. */
fprintf(stderr, "Errore nel fork");
exit(1);
}
return 0;
}
Un possibile output generato dall'esecuzione del codice: Figlio: 0 Padre: 0 Figlio: 1 Padre: 1 Figlio: 2 Padre: 2 Figlio: 3 Padre: 3 Figlio: 4 Padre: 4 Figlio: 5 Padre: 5 Figlio: 6 Padre: 6 Figlio: 7 Padre: 7 Figlio: 8 Padre: 8 Figlio: 9 Padre: 9 L'ordine di esecuzione dei processi è determinato dallo scheduler. Voci correlateCollegamenti esterni
|