В частности, я хочу знать, что происходит, когда я открываю открытый файл и не убиваю явно процесс, содержащий дескриптор файла для этого файла. Будет ли файл удален при выключении системы?
2 ответа
По сути, да - всякий раз, когда процесс, поддерживающий его, умирает. Ничего "волшебного" не происходит в этот момент. Так же, как запись каталога для файла является "жесткой ссылкой" на блоки, содержащие данные этого файла, так и дескриптор открытого файла. Если в каталоге нет записи и дескриптора открытого файла, блоки можно использовать повторно. Это означает, что даже если вы не выполните чистое отключение (например, дерните шнур питания), файл все равно будет удален - он был "удален" при запуске rm, только его блоки не были сразу доступны для повторного использования.
Ядро хранит заблокированную копию inode файла в памяти, поэтому блоки данных, принадлежащие этому файлу и inode, не могут быть освобождены, пока один процесс имеет открытый файл. Как только файл будет определенно закрыт (как это произойдет, когда система будет остановлена и процесс остановлен), все блоки и индекс будут освобождены для повторного использования. Это происходит до того, как файловую систему можно отключить (ее нельзя отключить, если у нее есть открытые файлы), и система выключается.