アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムを起動した後で、実行形式ファイルを消しても大丈夫なものなのでしょうか?。
プログラム起動後に、CPで実行形式ファイルに対して上書きすると実行中のプロセスも影響を受けるようなのですが、一度rmで消した後に、新たに同名のファイルを作ると、動作中のプロセスは特に影響を受けずに動きつづけるように見えるのですが、どなたか、ご存知の方ご教授いただけると助かります。

A 回答 (3件)

単に cp だとファイルがオープンされているかどうかに関係なく上書きされます. そのため起動しているプログラムのファイルを上書きしてしまうとエラーになる可能性もありますが, 一方でログをクリアしたいときなどは積極的に上書きしてもらうこともあります.


逆に rm + cp あるいは mv + cp だと, rm (あるいは mv) する前のファイルがオープンされているときには既にオープンされているファイルには影響を与えないのですが, 新たにオープンすると cp されたあとのファイルをオープンすることになります.
これは, ファイルが「ディレクトリエントリ→iノード番号→ファイルの実体」のように管理されており, またオープンしているファイルを iノード番号で管理しているためで,
・cp ではファイルの実体を上書きする
・rm ではディレクトリエントリを削除する (iノードへの参照がなくなればファイルの実体を削除する)
・mv ではディレクトリエントリに記録されているファイル名を変更する (「iノード番号→ファイルの実体」の部分にはタッチしない)
というそれぞれの挙動に依存しています.
    • good
    • 2
この回答へのお礼

詳細に噛み砕いて説明していただき、スッキリ理解することができました。
本当にありがとうございました。

お礼日時:2005/07/27 10:14

実行形式ファイルを実行したとき、ファイルの内容はメモリ中に展開されるので、それ以降に削除しても動作しているプログラムには影響を与えません。



ただし、そのプロセスの内部で削除したプログラムを起動するように仕組まれている場合は、既にファイルが存在しないわけですから、エラーが発生する可能性があります。
    • good
    • 2
この回答へのお礼

回答していただきありがとうございました。

お礼日時:2005/07/27 10:16

プロセスの実行中は, 実行形式ファイルはオープンしたままとなっています. 一方, rm をファイルに対して実行しても, 「オープン

しているプロセスがなくなる」までは (それ以降に実行されるプロセスからは見えませんが) 実際の削除は行われません.

この回答への補足

回答ありがとうございます。
プロセス起動中に、実行形式ファイルに対してcpで上書きを行ったときと、実行形式ファイルを一度消した(rm)あとに、cpで新たにファイルを作ったときでは、状態が違うということですね?。

動作中のプログラムの入れ替え(バージョンアップなど)を行う場合、プロセスの状態を気にせず、rm後に、新たにファイルを作成しておけば、プロセス終了後、再度プロセスを起動したときに、入れ替え後のファイルが実行されるという使い方が可能という認識でよろしいでしょうか?。

今までの経験では、プロセス起動中にcpで上書きしたときには、動作中のプロセスが異常終了してしまいますが、プロセス起動後にファイルを一度リネームし、新たにファイルを作成(cp)したときには、プロセスは正常に動作し続けて、一度プロセス終了後、再度起動した時には、新たなファイルが実行されるという、期待通りの動きをしてくれているようなのですが、今一つ根拠のない使い方で自信が持てないのですが...。

補足日時:2005/07/26 09:55
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!