在启动 ext4 文件系统上的某些 elf 文件后,该文件被锁定,无法写入,但可以删除和重写。在其他一些文件系统上,这种行为可能有所不同 - 我已经测试过 virtualboxfs,我也无法删除正在运行的可执行文件。
我正在尝试实现一些具有自重启和自编译模块的持续集成方案。这就是为什么我需要一种以某种方式解锁和覆盖我正在运行的二进制文件的可能性。对于 ext4,我可以删除文件,然后将文件重新编译到旧位置,但我不喜欢这种情况,因为带有旧文件的 inode 仍将被阻止。是否存在其他可能性来实现“透明”重新编译和重启?
答案1
所发生的情况是,您获取了该 inode 的文件处理程序。您可以删除该文件...但文件处理程序仍处于活动状态。(因此,即使删除了该文件,锁定的存储也不会被释放)
如果要替换文件,则需要重新加载文件处理程序。通常的做法是发送 SIGHUP(kill -HUP)
如果你需要在文件更改时自动执行此操作,则需要一个看门狗来代替你执行此操作。否则,你的脚本(或其他脚本)可以将此信号发送给进程