Middle
Šta radi sistemski poziv fork()?
sobes.tech АИ
Одговор од АИ
Sistemski poziv fork() u Unix-baziranim operativnim sistemima kreira novi proces koji je kopija pozivnog procesa (roditelja). Novi proces se naziva dete. Nakon poziva fork(), imate dva procesa koji nastavljaju izvršavanje od tačke poziva.
Karakteristike:
- Dete proces dobija kopiju adresnog prostora roditelja.
- Vrednost povratka
fork()omogućava razlikovanje procesa:- U roditeljskom procesu, vraća se PID deteta.
- U detetovom procesu, vraća se 0.
- U slučaju greške, vraća se -1.
Primer u Go (kroz syscall poziv, jer u Go nema direktnog ekvivalenta fork):
package main
import (
"fmt"
"syscall"
)
func main() {
pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
if err != 0 {
fmt.Println("Neuspešan fork")
return
}
if pid == 0 {
fmt.Println("Ovo je dete proces")
} else {
fmt.Printf("Ovo je roditeljski proces, PID deteta: %d\n", pid)
}
}
U Go, se obično koriste exec.Command i gorutine umesto fork().