Fork (programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
wikificata, + voci correlate, + collegamenti esterni, + template da tradurre |
completata la traduzione dall'inglese |
||
Riga 1:
{{S|informatica}}
Una '''fork''' in [[Programmazione (informatica)|programmazione]] è la modalità attraverso cui un [[Processo (informatica)|processo]] crea in memoria una copia di sé stesso
▲Una '''fork''' in [[Programmazione (informatica)|programmazione]] è la modalità attraverso cui un [[Processo (informatica)|processo]] crea in memoria una copia di sé stesso, la copia prenderà il nome di [[processo figlio]], mentre il processo originale verrà chiamato [[processo padre]]. Più in generale, una fork in un ambiente [[multithreading]] significa che un [[thread]] di esecuzione è stato duplicato.
Nei [[Sistema operativo|sistemi operativi]] [[UNIX]] e [[Unix-like]] il processo padre ed il processo figlio possono scegliere le istruzioni da eseguire tramite il [[Funzione (informatica)#Valore_restituito|valore di ritorno]] della [[chiamata di sistema]] <tt>fork()</tt>. Il valore di ritorno della chiamata <tt>fork()</tt> vale 0 nel processo figlio, un numero maggiore di 0 nel processo padre (il valore ritornato è proprio il [[PID (Unix)|PID]] del figlio)
Quando un processo effettua la chiamata <tt>fork()</tt> verrà creato un nuovo spazio di indirizzamento, comunque con tecniche di [[copy-on-write]], non verrà occupata memoria fisica fino al momento in cui uno dei due processi non effettuerà una scrittura. Il processo figlio avrà una copia esatta di tutti i segmenti di memoria del processo padre. Sia il processo padre che il figlio possono proseguire la loro esecuzione indipendentemente l'uno dall'altro.
== Importanza della fork() in Unix ==
<pre><nowiki>
</nowiki></pre>
Per fare ciò la shell effettua una <tt>fork()</tt> di se stessa, e usa la pipeline per agganciare l'output del comando find all'input del comando wc. Vengono creati due processi figli, uno per ogni comando (find e wc). Questi processi figli vengono ricoperti con il codice associato ai programmi che intendono eseguire, grazie alla famiglia di chiamate di sistema [[Exec(2)|exec]].
Più in generale, una <tt>fork()</tt> viene eseguita dalla shell ogni qualvolta un utente immette un comando.
== Esempio ==
Questo è un esempio in [[Linguaggio C]] che illustra l'idea del forking in ambiente Unix-like:
|