Sobes.tech
Middle

Какво прави системният повик fork()?

sobes.tech AI

Отговор от AI

Системният извик fork() в Unix-базирани операционни системи създава нов процес, който е копие на процеса, който го е извикал (родителя). Новият процес се нарича дете. След извикването на fork(), имате два процеса, които продължават изпълнението си от точката на извикване.

Характеристики:

  • Процесът дете получава копие на адресното пространство на родителя.
  • Стойността, която връща fork(), позволява да се различават процесите:
    • В родителския процес се връща PID на детето.
    • В детския процес се връща 0.
    • При грешка се връща -1.

Пример в Go (чрез syscall, тъй като в Go няма директен аналог на fork):

package main

import (
	"fmt"
	"syscall"
)

func main() {
	pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
	if err != 0 {
		fmt.Println("Неуспешен fork")
		return
	}
	if pid == 0 {
		fmt.Println("Това е детски процес")
	} else {
		fmt.Printf("Това е родителски процес, PID на детето: %d\n", pid)
	}
}

В Go обикновено се използват exec.Command и goroutines вместо fork().