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() ордуна колдонулат.