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