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