Назад | Перейти на главную страницу

Удалить блокировку из исполняемого файла elf на linux ext4?

После запуска некоторого файла elf, который находится в файловой системе ext4, он блокируется для записи, но может быть удален и перезаписан. В некоторых других файловых системах это поведение может быть другим - я тестировал virtualboxfs и также не могу удалить запущенный исполняемый файл.

Я собираюсь внедрить сценарий непрерывной интеграции с самозапуском и самокомпилированным модулем. Вот почему мне нужна возможность как-то разблокировать и перезаписать мой работающий двоичный файл. Для ext4 я могу удалить, а затем перекомпилировать файл в старое место, но мне не нравится этот сценарий, потому что индексный дескриптор со старым файлом все равно будет заблокирован. Есть ли другая возможность реализовать "прозрачную" перекомпиляцию и перезапуск?

Что происходит, так это то, что вы приобретаете обработчик файлов для этого inode. Вы можете удалить файл ... но обработчик файлов все еще активен. (поэтому, даже если файл будет удален, заблокированное хранилище не будет освобождено)

Если вы хотите заменить файл, вам необходимо перезагрузить обработчик файлов. Обычный способ сделать это - отправить SIGHUP (kill -HUP)

Если вам нужно, чтобы это происходило автоматически при изменении файла, вам понадобится сторожевой таймер, который сделает это от вашего имени. В противном случае ваш скрипт (или что-то еще) может отправить этот сигнал процессу