Sobes.tech
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.