- ベストアンサー
プロセス動作中に実行形式ファイルを消しても大丈夫?
プログラムを起動した後で、実行形式ファイルを消しても大丈夫なものなのでしょうか?。 プログラム起動後に、CPで実行形式ファイルに対して上書きすると実行中のプロセスも影響を受けるようなのですが、一度rmで消した後に、新たに同名のファイルを作ると、動作中のプロセスは特に影響を受けずに動きつづけるように見えるのですが、どなたか、ご存知の方ご教授いただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単に cp だとファイルがオープンされているかどうかに関係なく上書きされます. そのため起動しているプログラムのファイルを上書きしてしまうとエラーになる可能性もありますが, 一方でログをクリアしたいときなどは積極的に上書きしてもらうこともあります. 逆に rm + cp あるいは mv + cp だと, rm (あるいは mv) する前のファイルがオープンされているときには既にオープンされているファイルには影響を与えないのですが, 新たにオープンすると cp されたあとのファイルをオープンすることになります. これは, ファイルが「ディレクトリエントリ→iノード番号→ファイルの実体」のように管理されており, またオープンしているファイルを iノード番号で管理しているためで, ・cp ではファイルの実体を上書きする ・rm ではディレクトリエントリを削除する (iノードへの参照がなくなればファイルの実体を削除する) ・mv ではディレクトリエントリに記録されているファイル名を変更する (「iノード番号→ファイルの実体」の部分にはタッチしない) というそれぞれの挙動に依存しています.
その他の回答 (2)
- entree
- ベストアンサー率55% (405/735)
実行形式ファイルを実行したとき、ファイルの内容はメモリ中に展開されるので、それ以降に削除しても動作しているプログラムには影響を与えません。 ただし、そのプロセスの内部で削除したプログラムを起動するように仕組まれている場合は、既にファイルが存在しないわけですから、エラーが発生する可能性があります。
お礼
回答していただきありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
プロセスの実行中は, 実行形式ファイルはオープンしたままとなっています. 一方, rm をファイルに対して実行しても, 「オープンしているプロセスがなくなる」までは (それ以降に実行されるプロセスからは見えませんが) 実際の削除は行われません.
補足
回答ありがとうございます。 プロセス起動中に、実行形式ファイルに対してcpで上書きを行ったときと、実行形式ファイルを一度消した(rm)あとに、cpで新たにファイルを作ったときでは、状態が違うということですね?。 動作中のプログラムの入れ替え(バージョンアップなど)を行う場合、プロセスの状態を気にせず、rm後に、新たにファイルを作成しておけば、プロセス終了後、再度プロセスを起動したときに、入れ替え後のファイルが実行されるという使い方が可能という認識でよろしいでしょうか?。 今までの経験では、プロセス起動中にcpで上書きしたときには、動作中のプロセスが異常終了してしまいますが、プロセス起動後にファイルを一度リネームし、新たにファイルを作成(cp)したときには、プロセスは正常に動作し続けて、一度プロセス終了後、再度起動した時には、新たなファイルが実行されるという、期待通りの動きをしてくれているようなのですが、今一つ根拠のない使い方で自信が持てないのですが...。
お礼
詳細に噛み砕いて説明していただき、スッキリ理解することができました。 本当にありがとうございました。