Cos'è forcella?

Forcella

In informatica, una forcella (in inglese fork) è un'operazione che crea una copia di un processo. Questa copia è quasi identica al processo originale, ma opera in uno spazio di memoria separato.

Aspetti chiave:

  • Creazione di un nuovo processo: La <a href="https://it.wikiwhat.page/kavramlar/forcella%20(informatica)">forcella (informatica)</a> genera un processo figlio, che è una copia del processo padre.
  • Spazio di memoria separato: Il processo figlio ha il proprio spazio di memoria, indipendente da quello del processo padre. Le modifiche apportate in uno non influenzano l'altro.
  • Copia di dati: Al momento della forcella, la memoria del processo padre (dati, stack, ecc.) viene copiata nel processo figlio. Questa copia può essere completa o parziale, a seconda dell'implementazione (ad esempio, copy-on-write).
  • Esecuzione parallela: Dopo la forcella, entrambi i processi (padre e figlio) continuano l'esecuzione. Spesso è necessario un meccanismo (come una chiamata a sistema execve) per sovrascrivere il processo figlio con un programma diverso.
  • Valore di ritorno: La chiamata di sistema fork() restituisce un valore diverso a seconda del processo: zero al processo figlio e l'ID del processo figlio al processo padre. Questo permette ai processi di distinguersi e comportarsi diversamente.

Usi comuni:

  • Creazione di processi paralleli: Per eseguire attività simultaneamente. Ad esempio, un server web può creare un processo figlio per gestire ogni richiesta in arrivo.
  • Esecuzione di un programma diverso: Un processo può fare una forcella e poi usare execve() per sostituire la sua immagine di memoria con un altro programma.
  • Gestione di segnali: Dopo una forcella si può intercettare segnali in processi diversi a seconda delle necessita.

Implementazioni:

  • La chiamata di sistema fork() è una funzione POSIX standard, implementata in molti sistemi operativi Unix-like (Linux, macOS, BSD).
  • Esistono varianti di fork(), come vfork(), che ottimizzano il processo di copia.

Concetti correlati:

  • <a href="https://it.wikiwhat.page/kavramlar/Processo">Processo</a>
  • <a href="https://it.wikiwhat.page/kavramlar/Thread">Thread</a>
  • <a href="https://it.wikiwhat.page/kavramlar/execve">execve</a>
  • <a href="https://it.wikiwhat.page/kavramlar/Copy-on-write">Copy-on-write</a>