Если программа теряет память, после того, как программа завершает работу, она все еще теряет память, или система будет собирать всю память, выделенную программой, и утечки памяти больше нет?
Система соберет все ресурсы памяти у дочернего элемента, и больше не будет утечки памяти из дочернего процесса.Также вызов fork()
разделяет пространство памяти родительского и дочернего, поэтому утечка в дочернем процессе не будет протекать в родительском процессе, если вы не вызовете одну и ту же функцию с ошибками в обоих.
После того, как родительский процесс вызывает ожидание, как происходит утечка памяти, вызванная функцией в дочернем процессе?
Вызов wait()
в родительском процессе, и утечка памяти в дочерней системе действительно не имеет ничего общего сдруг с другом.Вызов wait()
в родительском элементе просто приводит к тому, что родительский блок блокирует ожидание сигнала, указывающего, что дочерний процесс завершен.Дочернему по-прежнему придется сначала вызвать func()
, прежде чем он сможет завершить, поскольку он должен передать возвращаемое значение func()
в exit()
.Следовательно, func()
может все еще технически «утекать» память в том смысле, что он выделяет некоторую память в куче, но не очищает ее, даже несмотря на то, что действия по очистке ОС происходят почти сразу после вызова func()
.Другими словами, после завершения вызова exit()
ОС высвободила ресурсы, используемые дочерним процессом, но сам func()
все еще может не освободить память, которую он пытался выделить.