2

私は、コンパイルしてから、スーパーコンピューターで pbs ジョブとして実行するために送信した fortran のコードを持っています。既に実行中のプログラムを保持したまま、ソースコードを変更して再度コンパイルしたい。私の質問は、別の実行可能ファイルで pbs ジョブを実行している場合に、ソース コードを変更して新しい実行可能ファイルを作成するとどうなるかということです。元の実行可能ファイルの結果は変更されますか?

ありがとう。

4

1 に答える 1

7

実行可能ファイルの置換が rename() システム コールでアトミックに行われる場合、実行中のプログラムが古い実行可能ファイルを使用し続けるように動作するはずです。OTOH 既存の実行可能ファイルにビットとピースを書き込むことによって置換が行われた場合、実行中の実行可能ファイルが影響を受ける可能性があります。

FWIW、これは fortran、pbs、またはトルクとは何の関係もありませんが、むしろ POSIX ファイルシステムのセマンティクスと関係があります。POSIX ファイルシステムは基本的に参照カウントのオブジェクト ストアであり、最終クローズ時に削除されます。実行可能ファイルを rename() で置き換えると、古い実行可能ファイルへの参照がディレクトリに存在しなくなるため、古い実行可能ファイルの参照カウントが 1 つ減ります。ただし、実行中のプログラムは引き続き参照を保持し、それを使用し続けることができます。新しい実行可能ファイルは、独自の参照カウントを持つ個別のオブジェクトです。

于 2011-09-15T05:19:33.670 に答える