Sobes.tech
Middle

Was macht der Systemaufruf fork()?

sobes.tech KI

Antwort von AI

Der Systemaufruf fork() in Unix-basierten Betriebssystemen erstellt einen neuen Prozess, der eine Kopie des aufrufenden Prozesses ist (Elternprozess). Der neue Prozess wird als Kind bezeichnet. Nach dem Aufruf von fork() haben Sie zwei Prozesse, die die Ausführung ab dem Aufrufpunkt fortsetzen.

Eigenschaften:

  • Der Kindprozess erhält eine Kopie des Adressraums des Elternprozesses.
  • Der Rückgabewert von fork() ermöglicht die Unterscheidung der Prozesse:
    • Im Elternprozess wird die PID des Kindprozesses zurückgegeben.
    • Im Kindprozess wird 0 zurückgegeben.
    • Bei Fehlern wird -1 zurückgegeben.

Beispiel in Go (über den syscall-Aufruf, da es in Go kein direktes Äquivalent zu fork gibt):

package main

import (
	"fmt"
	"syscall"
)

func main() {
	pid, _, err := syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
	if err != 0 {
		fmt.Println("Fork fehlgeschlagen")
		return
	}
	if pid == 0 {
		fmt.Println("Dies ist der Kindprozess")
	} else {
		fmt.Printf("Dies ist der Elternprozess, Kind-PID: %d\n", pid)
	}
}

In Go werden exec.Command und Goroutines häufiger verwendet als fork().