unlink / rm target открытой символической ссылки

В статье Настройка / отключение подсветки совпадающих скобок VIM даются некоторые предложения. Самый простой из них - добавить это в ваш файл .vimrc :

let g:loaded_matchparen=1 

Это оставит подсветку синтаксиса.

1
20.04.2019, 10:47
1 ответ
  1. Да, в Linux (и всех других POSIX-совместимых ядрах )индексный дескриптор файла будет существовать до тех пор, пока его не закроют все процессоры. Сюда входят mmaped-файлы.

    Это требуется POSIX:

    The mmap() function adds an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference is removed when there are no more mappings to the file.

  2. Open/mmap символической ссылки отслеживает только индексный дескриптор целевого файла (, за исключением крайнего случая использованияO_PATH). Все символические ссылки в пути разрешаются при вызове open(), а дескриптор файла ссылается только на целевой файл.

    Вы можете проверить это:

    1. создать файл/tmp/original
    2. создать символическую ссылку /tmp/symlink, указывающую на/tmp/original
    3. открыть /tmp/symlinkв программе например. введите в оболочке Pythonf = open('/tmp/symlink', 'r')
    4. посмотри на/proc/<pid of the program>/fd
    5. дескриптор файла будет указывать на/tmp/original

Убедитесь, что при перекомпиляции файл.so действительно удаляется и создается заново, а не записывается напрямую, и что длительный процесс не использует, например,. dlopenдля динамического повторного открытия файла.so.

Другая возможность, о которой я могу думать, заключается в том, что ленивая привязка приводит к отсрочке загрузки файла.so в долго выполняющемся процессе.

Вы можете попробовать запустить длительный процесс с LD_BIND_NOW=1в среде, а затем посмотреть, не приведет ли перекомпиляция к сбою процесса, чтобы проверить, не вызвана ли проблема отложенным связыванием.

1
27.01.2020, 23:41

Теги

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