Sobes.tech
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.