Unter Linux fork() aufrufen und die gegabelten (Kind) Prozess beendet werden alle virtuellen Speicherseiten noch als copy-on-write in der Mutter markiert?Wenn Sie fork() und die verzweigten (untergeordneten) Prozess-Exits sind alle VM-Seiten immer noch COW in der übergeordneten markiert? wenn Sie
Ich denke, die Seiten werden als COW markiert bleiben, da alles andere wahrscheinlich unerschwinglich teuer wäre, wahrscheinlich pro Seite Refcounts und andere teure Buchführung erfordern. Aber ich frage mich neulich, ob ich einen Prozess ausspreize, um Code in einem "stabilen Snapshot" des aktuellen Prozesses auszuführen. Was passiert, wenn der Child-Prozess beendet wird? Bleiben alle Speicherseiten im übergeordneten Ordner als Kopie-beim-Schreiben markiert? Das bedeutet, dass das Forking in einem Prozess mit viel virtuellem Speicher (z. B. 128 GB) nur einige Minuten lang Code ausführt, was zu einer anhaltenden Leistungsverschlechterung im übergeordneten Prozess für Stunden oder sogar Tage führen würde (ganz zu schweigen vom Fork Call selbst) die nicht billig sein.)
ich bin nur neugierig, was das tatsächliche Verhalten ist auf Linux (und ich habe keine Ahnung, wie ich es testen konnte.)
Ich bin nicht sicher, aber Sie sollten 'posix_spawn', nicht' fork' verwenden, externe Programme auszuführen. –
IIRC, COW wird auf * sowohl * als auch die untergeordneten Seiten festgelegt. Der erste, der kommt, erhält den PageFault und die Seite wird geklont (und auf keiner der geklonten Seiten ist COW mehr gesetzt) BTW: Sie könnten sich die Quelle ansehen. Es ist Open Source, weißt du ... – wildplasser