Sobes.tech
Middle

Čo robí systémový volaný fork()?

sobes.tech AI

Odpoveď od AI

Systémový volanie fork() v Unixových operačných systémoch vytvára nový proces, ktorý je kópiou volajúceho procesu (rodiča). Nový proces sa nazýva dieťa. Po volaní fork() máte dva procesy, ktoré pokračujú vo vykonávaní od miesta volania.

Vlastnosti:

  • Proces dieťaťa dostáva kópiu adresného priestoru rodiča.
  • Hodnota návratu fork() umožňuje rozlíšiť procesy:
    • V rodičovskom procese sa vracia PID dieťaťa.
    • V dieťatom procese sa vracia 0.
    • Pri chybe sa vracia -1.

Príklad v Go (cez syscall volanie, pretože v Go nie je priame ekvivalent fork):

package main

import (
	"fmt"
	"syscall"
)

func main() {
	pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
	if err != 0 {
		fmt.Println("Nepodarilo sa fork")
		return
	}
	if pid == 0 {
		fmt.Println("Toto je dieťa")
	} else {
		fmt.Printf("Toto je rodičovský proces, PID dieťaťa: %d\n", pid)
	}
}

V Go sa zvyčajne namiesto fork() používajú exec.Command a gorutiny.