В Linux, если вы fork() и разветвленный (дочерний) процесс завершается, все ли страницы виртуальной памяти по-прежнему помечены как копирование при записи в родительском?
Я думаю, что страницы останутся помеченными как COW, так как все остальное, вероятно, было бы непомерно дорогим в реализации, возможно, потребовало бы подсчета ссылок на страницу и другого дорогостоящего учета. Но на днях мне было интересно, если я разветвлю процесс для выполнения некоторого кода в «стабильном снимке» текущего процесса. Что происходит, когда дочерний процесс завершается? Все ли страницы памяти в родительском элементе остаются помеченными как копируемые при записи? Это означает, что разветвление процесса с большим объемом виртуальной памяти (например, 128 ГБ+) только для выполнения некоторого кода в течение нескольких минут приведет к длительному снижению производительности родительского процесса на несколько часов или даже дней (не говоря уже о самом вызове разветвления). что будет недешево)
Мне просто любопытно, каково реальное поведение в Linux (и я понятия не имею, как я могу это проверить).
posix_spawn
, а неfork
, для запуска внешних программ. - person R.. GitHub STOP HELPING ICE   schedule 23.03.2013