Что произойдет, если завершится последний процесс в пространстве имен?

"Липкий бит относился к исполняемым программам, отмечающим система для хранения изображения программы в памяти после того, как программа закончила работать".

Я думаю, что это - довольно устаревшая информация, сегодня самые современные Unixes игнорируют это. В Linux липкий бит только важен для каталогов. Посмотрите здесь и довольно информативная статья Wikipedia.

Так или иначе в том старом поведении изображение (только "код", не данные) было только сохранено в виртуальной памяти - обычно подкачанным, не в реальной памяти, чтобы выполнить его быстрее в следующий раз.

6
25.06.2015, 18:47
3 ответа

Похоже, что монтирования остались, но стали недоступными.

В качестве теста я сделал следующее:

  1. Вступил в новое пространство имен и смонтировал tmpfs:
root@localhost:~# mkdir tmp
root@localhost:~# unshare -m bash
root@localhost:~# mount -t tmpfs tmpfs tmp
  1. Проверял использование памяти до и после создания 200-мегабайтного файла в tmpfs. Вы можете заметить, что «общее» использование увеличилось с 404 мегабайт до 604 мегабайт:
root@localhost:~# free -m
              total        used        free      shared  buff/cache   available
Mem:           9885        2966         681         404        6237        6148
Swap:          8191         293        7898
root@localhost:~# dd if=/dev/urandom of=tmp/dummy bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 12.0075 s, 17.5 MB/s
root@localhost:~# free -m
              total        used        free      shared  buff/cache   available
Mem:           9885        2966         481         604        6437        5948
Swap:          8191         293        7898
  1. После выхода из оболочки без общего доступа память не была восстановлена:
root@localhost:~# exit
root@localhost:~# free -m
              total        used        free      shared  buff/cache   available
Mem:           9885        2963         484         604        6437        5951
Swap:          8191         293        7898

В то время как, если я размонтирую tmpfs, общее количество общее возвращается к исходному значению.

1
27.01.2020, 20:29

Невозможно добавить комментарий, потому что недостаточно повторений, так что вот оно :Я сделал точно такой же тест, как и jpa, на немодифицированном растяжке Debian, и память вернулась к исходному значению, хотя я НЕ размонтировал. Так что, кажется, это поведение изменилось.

http://man7.org/linux/man-pages/man7/namespaces.7.html

подразумевает это, по крайней мере, говоря:

Bind mounting (see mount(2)) one of the files in this directory to somewhere else in the filesystem keeps the corresponding namespace of the process specified by pid alive even if all processes currently in the namespace terminate.

Значит, отказ от этого разрушает пространство имен (? ).

1
27.01.2020, 20:29

Меня интересовал тот же вопрос, поэтому я провел небольшой тест (на ядре 4.20.0, используя unshare from util -linux 2.33; man-страница для unshare в этой версии содержит некоторые заметки об общем/частном монтировании, которые стоит прочитать, и YMMV, если вы используете более старую версию ).

TL;DR:Да, файловая система размонтируется, когда завершается последний процесс в пространстве имен.


В моем случае я тестирую устройство dm-6, и оно не смонтировано во «внешнем» пространстве имен.

Окно 1:

cd /sys/fs/ext4
ls -d dm-6
# No such file or directory
Окно 2 :
unshare -m
mount /dev/dm-6 /mnt/tmp
# don't exit yet, keep the namespace active
Окно 3 :Сделайте то же самое, что и окно 1.

Окно 1:

ls -d dm-6
# exists now

Окно 2 :Выход из среды unshare

Окно 1 :Проверьте еще раз, dm-6все еще существует

Окно 3 :Выход из среды unshare

Окно 1 :Проверить еще раз, dm-6снова нет


Еще одна полезная демонстрация/тест :Аналогичная идея, но вместо 3 окон вход и выход из окна 2 дважды. Проверьте dmesgили журналы и убедитесь, что в этом случае сообщение ядра о том, что оно смонтировало файловую систему, появляется дважды.

4
27.01.2020, 20:29

Теги

Похожие вопросы