Відповіді:
Не зовсім. Файл вже відкритий програмою. Видалення файлу (а потім його заміна іншою версією) не впливає на запущену програму, оскільки вихідний файл тримається відкритим (хоча без імені на диску, щоб відкрити його знову), поки програма не буде виконана з ним. Тільки коли всі ручки до файлу закриті, його блоки даних на диску вивільняються. До цього часу відкритий файл можна прочитати і записати так само, як і звичайне - єдиною зміною є те, що ніхто більше не може його відкрити, оскільки його ім'я було видалено.
Хоча частини програми, можливо, вже були прочитані в операційну пам'ять при її видаленні, вони все одно можуть бути відкинуті і перечитані пізніше, або нові частини програми, які раніше не були виконані, все ще можуть бути завантажені з видаленого файлу.
rm -rf /
працює .....
rm -rf /
не вийде, якщо спробувати запустити його вдруге відразу після цього;)
lsof
виході "/ some / file / name (delete)" , і я знаю, що таким виглядає файл "zombie" ... але чи є якийсь спосіб зберегти вміст такого файлу від зникнення коли остання ручка файлу відмирає?
root
можливо, вдасться створити ім’я для нього (і тим самим запобігти видаленню) за допомогою linkat
системного виклику. Але виконувані файли та бібліотеки відображаються в пам'яті, що не потребує обробки файлів. Я не знаю жодного способу отримати ручку на файл, який існує лише тому, що він відображений у пам'яті. Хоча до виконуваних файлів можна отримати доступ, /proc
поки вони запущені, тому це може бути лише після відновлення лише бібліотекам та іншим картам пам'яті. Якщо ви хочете отримати детальнішу інформацію про це, вам слід задати це окремо.
Чи
xterm
процес кешований в оперативній пам’яті, поки він працює?
Саме так. Це схоже на процес, який дозволяє встановлювати оновлення для речей під час їх запуску без їх виходу з ладу. А також чому вам доведеться перезапустити служби після їх оновлення. Після того, як щось працює, його двійкові дані залишаються в пам'яті.
Якщо це залежить від інших файлів (які не перебувають у "відкритому" стані), які видаляються або замінюються, це може спричинити проблеми, але для чогось такого ж дискретного, як xterm
це, це не проблема.
Фактично це особливість роботи комп'ютерів: Коли програма викликається, вона дійсно завантажується в пам'ять, і вона працює звідти.
Файл насправді працює аналогічно. Щоб уникнути проблем, багато файлів в UNIX-ish системах створюють блокування.
Справжня загадка, чому ви не можете робити подібні та подібні речі в Windows.
Ця функція насправді є тим, що дозволяє оновлювати всю систему, включаючи програми, активні у вашій системі. ;)
apt-get
це видаленняxterm
, і поняття не має, що це якимось чином залежить відxterm
процесу - тому мова йде про "Чому xterm можна видалити під час запуску?". Приємне запитання.