Чому термінал може видалити себе?


25

скріншот

Як apt-get remove xtermпроходить? А після видалення xtermне закривається і продовжує нормально функціонувати.

Чи xtermпроцес кешований в оперативній пам’яті, поки він працює?


6
Якщо бути точним, він насправді не видаляє себе - apt-getце видалення xterm, і поняття не має, що це якимось чином залежить від xtermпроцесу - тому мова йде про "Чому xterm можна видалити під час запуску?". Приємне запитання.
Волкер Зігель

2
Це схоже на те, як ви можете видалити жорсткий диск під час роботи ОС.
jkd

Відповіді:


53

Не зовсім. Файл вже відкритий програмою. Видалення файлу (а потім його заміна іншою версією) не впливає на запущену програму, оскільки вихідний файл тримається відкритим (хоча без імені на диску, щоб відкрити його знову), поки програма не буде виконана з ним. Тільки коли всі ручки до файлу закриті, його блоки даних на диску вивільняються. До цього часу відкритий файл можна прочитати і записати так само, як і звичайне - єдиною зміною є те, що ніхто більше не може його відкрити, оскільки його ім'я було видалено.

Хоча частини програми, можливо, вже були прочитані в операційну пам'ять при її видаленні, вони все одно можуть бути відкинуті і перечитані пізніше, або нові частини програми, які раніше не були виконані, все ще можуть бути завантажені з видаленого файлу.


4
Це фактична причина .... це також причина, чому rm -rf /працює .....
heemayl

6
Якщо ви хочете використовувати слово "працює", щоб описати успішне розкручування всього. ;) Цікаво, що rm -rf /не вийде, якщо спробувати запустити його вдруге відразу після цього;)
thomasrutter

1
Я часто бачив у lsofвиході "/ some / file / name (delete)" , і я знаю, що таким виглядає файл "zombie" ... але чи є якийсь спосіб зберегти вміст такого файлу від зникнення коли остання ручка файлу відмирає?
Кіліан Фот

1
@KilianFoth, якщо ви можете знайти процес, у якому файл все ще відкритий, ви можете скопіювати його з / proc / $ PID / fd / $ ID в інший файл, але я не можу знайти спосіб відновити файл на місці, оскільки всі спроби жорсткого з'єднання файлу закінчуються невдачею.
psusi

3
@KilianFoth Якщо є обробка файлів, то, rootможливо, вдасться створити ім’я для нього (і тим самим запобігти видаленню) за допомогою linkatсистемного виклику. Але виконувані файли та бібліотеки відображаються в пам'яті, що не потребує обробки файлів. Я не знаю жодного способу отримати ручку на файл, який існує лише тому, що він відображений у пам'яті. Хоча до виконуваних файлів можна отримати доступ, /procпоки вони запущені, тому це може бути лише після відновлення лише бібліотекам та іншим картам пам'яті. Якщо ви хочете отримати детальнішу інформацію про це, вам слід задати це окремо.
kasperd

8

Чи xtermпроцес кешований в оперативній пам’яті, поки він працює?

Саме так. Це схоже на процес, який дозволяє встановлювати оновлення для речей під час їх запуску без їх виходу з ладу. А також чому вам доведеться перезапустити служби після їх оновлення. Після того, як щось працює, його двійкові дані залишаються в пам'яті.

Якщо це залежить від інших файлів (які не перебувають у "відкритому" стані), які видаляються або замінюються, це може спричинити проблеми, але для чогось такого ж дискретного, як xtermце, це не проблема.


6
Не зовсім .. частини програми читаються в пам'ять лише при необхідності, і їх можна відкинути в будь-який час, щоб звільнити пам'ять для інших цілей, і тому потрібно буде прочитати їх знову пізніше (коли програма намагається отримати доступ до цих частин знову).
psusi

17
Це не обов'язково в оперативній пам'яті. Але файли фактично не видаляються, поки вони не відкриються, включаючи виконуваний файл xterm.
користувач253751

@immibis, отже, моя відповідь;)
psusi

2

Фактично це особливість роботи комп'ютерів: Коли програма викликається, вона дійсно завантажується в пам'ять, і вона працює звідти.

Файл насправді працює аналогічно. Щоб уникнути проблем, багато файлів в UNIX-ish системах створюють блокування.

Справжня загадка, чому ви не можете робити подібні та подібні речі в Windows.

Ця функція насправді є тим, що дозволяє оновлювати всю систему, включаючи програми, активні у вашій системі. ;)


+1 для "фактичного простою, чому ви не можете робити подібні та подібні речі в Windows"
arielf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.