GNU/Linux >> Znalost Linux >  >> Linux

Jak kopírování při zápisu ve fork() zvládá více rozvětvení?

Pokud fork je z původního nadřazeného procesu volána vícekrát, pak budou mít stránky každého z potomků a rodiče označeny jako pouze pro čtení. Když se podřízený proces pokusí zapsat data, stránka z nadřazeného procesu je zkopírována do jeho adresního prostoru a zkopírovaná stránka je označena jako zapisovatelná v podřízeném, ale ne v nadřazeném.

Pokud fork je volána z podřízeného procesu a vnuk se pokouší o zápis, stránka od původního rodiče je zkopírována do prvního potomka a poté do vnukového a vše je označeno jako zapisovatelné.


Původní stránka je označena jako zapisovatelná pouze v případě, že patří k jedinému procesu, což by nemuselo platit, pokud by existovalo více forků. Nová stránka je vždy označena jako zapisovatelná, protože patří pouze procesu, který se ji pokusil zapsat.


Linux
  1. Jak zabít proces, jehož rodič je init?

  2. Jak funguje životní cyklus procesu Linux – nadřazený, podřízený a iniciační proces

  3. Jak nechat podřízený proces zemřít po odchodu rodiče?

  1. Jak se PulseAudio spouští?

  2. Jak systemd řeší smrt dítěte řízeného procesu?

  3. Jak si Linux zachovává kontrolu nad CPU na jednojádrovém stroji?

  1. Jak funguje vidlicová bomba?

  2. Linux – Jak Node.js / Cluster Module předává nová spojení z hlavního/nadřazeného procesu do podřízených procesů?

  3. Jak zabít <zaniklý> proces s rodičem 1