当程序打开由符号链接引用的脚本并且符号链接发生变化时 - 它是否会继续指向原始文件?

当程序打开由符号链接引用的脚本并且符号链接发生变化时 - 它是否会继续指向原始文件?

假设我有一个长时间运行的程序,它使用下面的符号链接运行。

最新版本的脚本 -> /路径/到/脚本/v1

我的程序仍在运行,我进行了发布,并且我的部署脚本将更新符号链接为:

最新版本的脚本 -> /路径/到/脚本/v2

我的长时间运行的程序是否仍会继续从第一个符号链接位置或第二个符号链接位置加载脚本(如果它尚未将其全部加载到内存中)?

答案1

程序将继续读取同一个文件直到结束。

当程序需要读取文件时,它仅使用一次路径 - 调用 open() 函数时。打开文件后,所有读取和写入都使用其“句柄”或“文件描述符”完成,这完全绕过名称/路径系统,并且始终引用该特定项目,无论其当前位置如何。

符号链接不会改变这一点,因为它们在路径查找期间被处理,并且程序最终总是打开真正的目标文件,而不是符号链接本身。

但如果程序关闭了文件并希望稍后重新打开它,然后该路径将被再次处理,符号链接将被解析到新的位置,并且程序将获得更新的版本。

相关内容