web-dev-qa-db-ja.com

Linuxでは、実行可能ファイルが変更または削除された場合、実行中のプログラムはどうなりますか?

まあ言ってみれば /usr/local/bin/Rubyがバックグラウンドで実行されている場合、Rubyを別のバージョンで上書きするか、Rubyを削除します。

Rubyプロセスを実行している人はどうなりますか?

12
Cheng

実行可能ファイルがどのように更新されるかによって異なります。同じファイルを開いてその一部を変更すると、悪いことが起こります。ファイルが削除されると、ファイルはファイルシステムのディレクトリ構造から削除されますが、ファイルを開いている最後のプロセスが実行されるまで、実際にはリンクが解除されません(つまり、削除されません)。したがって、実行可能ファイルが削除され、同じ名前の新しい実行可能ファイルがその場所に書き込まれた場合、古い実行可能ファイルは引き続き正常に機能するはずです。

10
KeithB

彼らは続けます。彼らが自分自身にアクセスしようとして、まったく間違ったものを受け取った場合、恐ろしくクラッシュするかもしれません。私がしなければならなかったのでなければ私はそれをしません:)

4
Phoshi

Linuxカーネルには、ロード/リンクプロセス中にイメージを含む実行可能ファイル自体を開くローダーと呼ばれるコンポーネントがあり、ライブラリなどへのリンクが完了すると、ローダーはファイルを閉じると理解しています。したがって、このプロセスは発生し、カーネルが実際にプロセスを起動するまでに完了します。

後で実行可能ファイルが外部ライブラリをインポートしようとした場合に、ディスク上の元の実行可能ファイルを参照する必要があるかどうかはわかりません。

ディスク上の実行可能ファイルを削除しても、メモリにロードされている実行可能ファイルは影響を受けないというのが私の経験です。同様に、実行可能ファイルが新しいバージョンに置き換えられた場合、現在実行中のファイルは、停止して再起動しない限り、「自動的に」更新されません。

RAIDコントローラに問題があり、ルートディレクトリと他のパーティションがマウントされているディスク全体が突然切断されたかのように動作する原因になりました。新しいプログラムをロードできませんでしたが、ディスクからファイルが必要になるまで、メモリ内のプログラムは正常に機能していました。

1
LawrenceC

Rubyプロセスを実行している人はどうなりますか?

  1. / usr/local/bin/Rubyのコピーを作成します
  2. [実行されていない場合は、/ usr/local/bin/Rubyを実行します]
  3. 試してください:rm/usr/local/bin/Ruby
  4. 自分の目で確かめてください:)
1
JohnM2