Middle
Ի՞նչ է անում համակարգային կանչը fork()։
sobes.tech AI
Պատասխան AI-ից
Unix-հիմնված օպերացիոն համակարգերում fork() համակարգային կանչը ստեղծում է նոր գործընթաց, որը համընկնում է կանչող գործընթացի (հայր) պատճենին: Նոր գործընթացը կոչվում է երեխա: 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 և goroutine-ներ են օգտագործվում fork()-ի փոխարեն։