Что происходит в Linux при обновлении динамической библиотеки на диске

#linker #loading #dynamic-library

#компоновщик #Загрузка #dynamic-library

Вопрос:

Что происходит в Linux, когда динамическая библиотека загружается, обновляется на диске, затем запускается новый процесс, который ссылается на эту библиотеку? Связан ли новый процесс со старой копией в памяти или с более новой версией на диске?

Ответ №1:

Когда менеджеры пакетов обновляют файлы на диске, они фактически удаляют старый файл и записывают новый файл на его место. В результате старые приложения, которые уже открыли библиотеку, продолжают видеть старую — старый файл все еще существует на диске и в памяти, но у него нет имен файлов, указывающих на него больше. Такого рода файлы называются сиротами.

Между тем, приложения, запущенные после замены библиотеки, начинают использовать обновленную версию библиотеки.

Вот почему после отключения питания вы иногда видите следующие сообщения в журналах или во время загрузки:

 EXT4-fs (sda3): 34 orphan inodes deleted
  

Старая система все еще обращалась к этим файлам после сбоя, но они больше не видны приложениям, поэтому их следует удалить.