2

我在 fortran 中有一个代码,我对其进行编译,然后将其作为 pbs 作业在超级计算机中运行。我想修改源代码并再次编译它,同时保留已经运行的程序。我的问题是,如果我有一个 pbs 作业使用不同的可执行文件运行,我修改源代码并制作一个新的可执行文件会发生什么。原始可执行文件的结果会被修改吗?

谢谢。

4

1 回答 1

7

如果可执行文件的替换是通过 rename() 系统调用原子地发生的,那么它应该可以工作,以便正在运行的程序继续使用旧的可执行文件。OTOH,如果通过将零碎写入现有可执行文件来进行替换,则正在运行的可执行文件可能会受到影响。

FWIW,这与 fortran、pbs 或扭矩无关,而是与 POSIX 文件系统语义有关。POSIX 文件系统本质上是引用计数的对象存储,最后关闭时删除。当您用 rename() 替换可执行文件时,旧可执行文件的引用计数会减少 1,因为目录不再有对它的引用。但是,正在执行的程序仍然持有一个引用并且可以继续使用它。新的可执行文件是一个单独的对象,它有自己的引用计数。

于 2011-09-15T05:19:33.670 回答