Sobes.tech
Middle

Cosa fa la chiamata di sistema fork()?

sobes.tech AI

Risposta dell'AI

La chiamata di sistema fork() nei sistemi operativi basati su Unix crea un nuovo processo che è una copia del processo chiamante (genitore). Il nuovo processo è chiamato figlio. Dopo aver chiamato fork(), si hanno due processi che continuano l'esecuzione dal punto della chiamata.

Caratteristiche:

  • Il processo figlio riceve una copia dello spazio di indirizzamento del genitore.
  • Il valore di ritorno di fork() permette di distinguere i processi:
    • Nel processo genitore, viene restituito il PID del processo figlio.
    • Nel processo figlio, viene restituito 0.
    • In caso di errore, viene restituito -1.

Esempio in Go (tramite chiamata syscall, poiché in Go non esiste un equivalente diretto a fork):

package main

import (
	"fmt"
	"syscall"
)

func main() {
	pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
	if err != 0 {
		fmt.Println("Fork fallito")
		return
	}
	if pid == 0 {
		fmt.Println("Questo è il processo figlio")
	} else {
		fmt.Printf("Questo è il processo genitore, PID del figlio: %d\n", pid)
	}
}

In Go, si usano generalmente exec.Command e goroutine invece di fork().