• ベストアンサー

プロセス動作中に実行形式ファイルを消しても大丈夫?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

単に cp だとファイルがオープンされているかどうかに関係なく上書きされます. そのため起動しているプログラムのファイルを上書きしてしまうとエラーになる可能性もありますが, 一方でログをクリアしたいときなどは積極的に上書きしてもらうこともあります. 逆に rm + cp あるいは mv + cp だと, rm (あるいは mv) する前のファイルがオープンされているときには既にオープンされているファイルには影響を与えないのですが, 新たにオープンすると cp されたあとのファイルをオープンすることになります. これは, ファイルが「ディレクトリエントリ→iノード番号→ファイルの実体」のように管理されており, またオープンしているファイルを iノード番号で管理しているためで, ・cp ではファイルの実体を上書きする ・rm ではディレクトリエントリを削除する (iノードへの参照がなくなればファイルの実体を削除する) ・mv ではディレクトリエントリに記録されているファイル名を変更する (「iノード番号→ファイルの実体」の部分にはタッチしない) というそれぞれの挙動に依存しています.

manao1999
質問者

お礼

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

その他の回答 (2)

  • entree
  • ベストアンサー率55% (405/735)
回答No.2

実行形式ファイルを実行したとき、ファイルの内容はメモリ中に展開されるので、それ以降に削除しても動作しているプログラムには影響を与えません。 ただし、そのプロセスの内部で削除したプログラムを起動するように仕組まれている場合は、既にファイルが存在しないわけですから、エラーが発生する可能性があります。

manao1999
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

プロセスの実行中は, 実行形式ファイルはオープンしたままとなっています. 一方, rm をファイルに対して実行しても, 「オープンしているプロセスがなくなる」までは (それ以降に実行されるプロセスからは見えませんが) 実際の削除は行われません.

manao1999
質問者

補足

回答ありがとうございます。 プロセス起動中に、実行形式ファイルに対してcpで上書きを行ったときと、実行形式ファイルを一度消した(rm)あとに、cpで新たにファイルを作ったときでは、状態が違うということですね?。 動作中のプログラムの入れ替え(バージョンアップなど)を行う場合、プロセスの状態を気にせず、rm後に、新たにファイルを作成しておけば、プロセス終了後、再度プロセスを起動したときに、入れ替え後のファイルが実行されるという使い方が可能という認識でよろしいでしょうか?。 今までの経験では、プロセス起動中にcpで上書きしたときには、動作中のプロセスが異常終了してしまいますが、プロセス起動後にファイルを一度リネームし、新たにファイルを作成(cp)したときには、プロセスは正常に動作し続けて、一度プロセス終了後、再度起動した時には、新たなファイルが実行されるという、期待通りの動きをしてくれているようなのですが、今一つ根拠のない使い方で自信が持てないのですが...。

関連するQ&A

  • プロセスが起動中かどうかを判定するコマンドはありますか?

    あるプログラムを起動したとします。 psコマンドで起動中のプロセス番号を知ることができるのはわかりますが、 プログラム起動中かどうかを判定するコマンドとかあるでしょうか。 たとえば、 >あるコマンド プロセスID のようにプロセスIDを引数として実行すると、プロセス起動中かどうか判定できるような。。。 ご存知な方ご教授おねがいします。

  • VBで作成した実行形式をASPを用いて実行したい

    VBで作成した標準EXEをWEBサーバ上で実行しようと考えていまして現在苦悩しています。 BASP21を使用してEXEを実行したところ、PROCESSには起動したEXEが表示されているので実行はされてはいるのですが処理が適切になされていない状況です。 VBで作成した実行形式をASPを用いて実行する場合には、何か方法があるのでしょうか? よろしくおねがいします。 [動作環境] OS:Windows2000 ServerSP3 ブラウザー:IE6.0 VB6.0+SP5 実行形式の処理内容 SUB MAINを起動関数に設定し、OPEN関数でFILE書き込みを行う。 なお、このファイルはサーバー上に作成される。

  • 実行ファイルの削除

    実行ファイルの削除 実行ファイル・バッチファイルを実行直後に削除すると、ファイルが復活してしまい困っています。 タスクマネージャで確認しましたが実行したプロセスは残っていませんし、復活したファイルはアクセスを全く受け付けません。 しかも時間が経つと、いつの間にか削除されていたりします。 対象ファイルに対しUNBLOCKERやtakeown(エクスプローラのセキュリティタブを見ると所有権を失っているようなので..)を試しましたがはじかれてダメでした。 この影響なのか最近mingwを使用した時、"rm: cannot lstat `conftest.exe': Permission denied"が大量に出て困っています。 OSはWin7Pro(64bit)でディスクはNTFSです。 どなたかご存知の方がおられたら回答お願いします。

  • 実行ファイルの動作について

    VB6.0を用いて簡単なアプリケーションを作成しています。 内容は、Inetコントロールを用いてFTPサーバとクライアント間でのファイル転送を行うものです。 プログラムを作成し実行してみたところ、 プロジェクト上では動作しますが、 実行ファイルを作成し、そこで実行させると途中でなぜかハングしてしまいます。 しかし、ファイルの転送には成功しているようです。 転送後のエラー処理に不具合があるのかとも思いますが、 プロジェクト上では問題ありません。 何度もコンパイルし直し、その都度実行ファイルも 作成しなおしています。 なぜでしょうか?? どなたかアドバイスいただけないでしょうか?

  • Processクラスが正常に動作しません。

    VisualStudio .NET2003でProcessクラスを利用してPDFファイルを自動的に印刷するプログラムを作っていますが、正常に動作しなくて困っています。タスクマネージャーを確認してみると、Adobe Readerのプロセスが実行されていることが分かったのですが、印刷処理は実行されないままになっています。 下記にコードを記載しますのでアドバイスよろしくお願いします。 Process myProcess = new Process(); myProcess.StartInfo.FileName = ”MyFile.pdf"; myProcess.StartInfo.Verb = "Print"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();

  • PHP動作中のプロセスはどうなっている?

    現在PHPで動くWebアプリを作成中です。 このPHPの動作は約1分動作します。 このPHPを動作中にブラウザを閉じたり、別のページに遷移したり、またはブラウザの「中止」ボタンや「更新」ボタンを押すと、実行中のPHPのプロセスってどうなってしまうのでしょうか? これはブラウザ側からPHPの動作を停止せよという命令が行くのですか? それともPHPは最後まで実行されて、その結果のレスポンスをブラウザが受け取らないだけなのでしょうか? やりたいことがあるのですが、SQLiteはデータベースの同時書き込みができないので、他のPHPがそのデータベースを書き込む前にファイルロックと同じ要領でファイルをロックし、書き込み終了したらファイルロックを解除する、というのをやりたいのですが、書き込み中にPHPのプロセスが停止してしまったらファイルがロックしたままになるかと思って質問しました。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • iniファイルを呼ぶバッチファイルの実行

    VB2008でProcess.Startを使ってバッチファイルを実行する プログラムを作成しました。 バッチファイルではini.batという変数に値を設定するファイルを 最初にcallしています。 しかし設定されずにエラーになってしまいます。 どうしたらうまく動くのでしょうか。 バッチファイルをクリックで実行すると正常に動作します。

  • VBS形式ファイル:ダブルクリックで実行させたい

    VBS形式ファイル:ダブルクリックで実行させたいです。 当方が現在トライしているのは: エクスプローラからVBS形式ファイル→アプリケーションから開く→プログラムの選択 によって何らかのプログラムを選択すればよいのかと思い、プログラムを探しておりますが適当なのが見つかりません。 この問題の経緯: 先ほどまではVBS形式ファイルをダブルクリックすると自動で実行できました。VBS形式ファイル編集時は右クリック→秀丸から開いておりました。 しかし、プログラム編集に没頭するあまり、右クリック→開くとしたところノートパッドで開かれたことから、秀丸が開いてほしいと思ってしまい、誤ってアプリケーションから開く→プログラムの選択→秀丸を選んでしまいVBS形式ファイルをダブルクリックすると自動で実行できなくなり、秀丸で開かれてしまうようになりました。 そこで: これを解消して以前のようにダブルクリック実行させたいです。 どうぞよろしくお願いします。

  • 実行形式(exe)のアイコンを変えたい

    WinXpでPC使用しております。 実行形式(exe)ファイルのアイコンを変えたい時は、ショートカットを作成し、これをディスクトップ上にコピーし、画面上からクリックしてプログラム起動をしていたのですが。 実行形式(exe)ファイル本体のアイコンを変更することは可能なのでしょうか。 可能な場合はどうすれば良いのか、教えて下さい。

  • Windows95のBATファイル実行

    皆様是非、御教授ください。 Windows95にてBatファイルを作成しました。 複数の実行(EXE)プログラムが起動するように したのですが、起動すると実行が完了しない状態で 次のプログラムが走ってしまいます。 WindowsNT上のように実行完了した後に次へ処理が 移る方法はないのでしょうか。 宜しく、お願い致します。