Sobes.tech
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()-ի փոխարեն։