Middle
Mida teeb süsteemikõne fork()?
sobes.tech AI
Vastus AI-lt
Unix-põhistes operatsioonisüsteemides loob fork() süsteemikõne uue protsessi, mis on koopiana kutsuva protsessi (ema). Uus protsess nimetatakse lapseks. Pärast fork()-i kutsumist jätkavad mõlemad protsessid täitmist samast punktist.
Omadused:
- Lapse protsess saab koopiat ema protsessi aadressiruumist.
fork()-i tagastav väärtus võimaldab protsesse eristada:- Ema protsessis tagastatakse lapse PID.
- Lapse protsessis tagastatakse 0.
- Kui tekib viga, tagastatakse -1.
Näide Go keeles (syscall kaudu, kuna Go-s ei ole otse fork()-i):
package main
import (
"fmt"
"syscall"
)
func main() {
pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
if err != 0 {
fmt.Println("Fork ebaõnnestus")
return
}
if pid == 0 {
fmt.Println("See on lapse protsess")
} else {
fmt.Printf("See on ema protsess, lapse PID: %d\n", pid)
}
}
Go-s kasutatakse tavaliselt exec.Command ja goroutine-sid fork() asemel.