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().