Middle
Ko dara sistēmas izsaukums fork()?
sobes.tech AI
Atbilde no AI
Unix bāzētas operētājsistēmās fork() sistēmas izsaukums izveido jaunu procesu, kas ir kopija no izsaucēja procesa (vecāka). Jaunais process tiek saukts par bērnu. Pēc fork() izsaukšanas ir divi procesi, kas turpina izpildi no izsaukuma punkta.
Īpašības:
- Bērna process saņem vecāka adreses telpas kopiju.
fork()atgriešanas vērtība ļauj atšķirt procesus:- Vecāka procesā tiek atgriezts bērna PID.
- Bērna procesā tiek atgriezts 0.
- Ja ir kļūda, tiek atgriezts -1.
Piemērs Go valodā (caur syscall, jo Go nav tiešas fork() funkcijas):
package main
import (
"fmt"
"syscall"
)
func main() {
pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
if err != 0 {
fmt.Println("Neizdevās izsaukt fork()")
return
}
if pid == 0 {
fmt.Println("Šis ir bērna process")
} else {
fmt.Printf("Tēva process, bērna PID: %d\n", pid)
}
}
Go parasti vietā fork() izmanto exec.Command un gorutīnas.