Надлежащая подсистема безопасности, такая как SELinux позволит Вам выполнять исполняемый файл с ограниченным или никакими возможностями, включая диск, сеть и средства UI. ulimit будет заботиться об остальных.
Причиной является Unix, не блокирует исполняемый файл, в то время как это выполняется или даже если этому действительно нравится Linux, эта блокировка относится к inode, не имени файла. Это означает, что процесс, сохраняющий это открытый, получает доступ к тем же (старым) данным даже после того, как файл был удален (несвязанный на самом деле) и заменил новым тем же именем, которое является по существу, что делает обновление пакета.
Это - одни из основных отличий между Unix и Windows. Последний не может обновить файл, заблокированный, поскольку он пропускает слой между именами файлов и inodes создание главной стычки, чтобы обновить или даже установить некоторые пакеты, поскольку он обычно требует полной перезагрузки.
Исполняемые файлы обычно открываются однажды, присоединяются к дескриптору файла и не имеют дескриптора файла к своему двоичному файлу вновь открытым в течение единственного периода выполнения. Например, если Вы выполняетесь bash
, exec()
обычно только создает дескриптор файла для inode, которым указывают /bin/bash
однажды - на вызове.
Это часто означает, что для простых двоичных файлов, которые не пытаются перечитать себя во время выполнения (при помощи пути, которым они были вызваны), содержание, которое кэшируется, остается допустимым как свисание inode. Это означает, что существует по существу копия предыдущей версии исполняемого файла.
В более сложных случаях это может вызвать проблемы. Например, файл конфигурации может быть обновлен и впоследствии перечитан, или программа может передолжностное лицо сама через путь, от которого это выполнялось. Могут также быть проблемы, если программы взаимосвязаны, и каждый выполняется перед обновлением, и один после (возможно первой программой). Это также верно для некоторых библиотек.
Для простых вариантов использования, тем не менее, безопасно обновить, не перезапуская процесс.
bash
двоичный файл является приблизительно 200 4K страницами, не уверенными, что они все используются на средней сессии.
– jlliagre
30.04.2013, 18:09
ialloc()
луг к структуре ядра на чтении, не размещении в ОЗУ самих страниц. Разве я не прав в размышлении, что на современном расширении* файловые системы, inode в конечном счете последователен в ядре (и в подсистеме VM)?
– Chris Down
30.04.2013, 19:27