実行可能ファイルがプロセスで実行されるときに、実行可能ファイルが上書きまたは削除され、再インストールによって再作成された場合、プロセスは新しい実行可能ファイルを再実行しますか?
質問への答えは
実行可能ファイルがプロセスでサービス/デーモンとして実行されているかどうか。
Linux、Unixなどのオペレーティングシステム...?
再インストールがインストーラーファイル(deb
Ubuntu、msi
Windowsのファイルなど)からのものか、ソースコードのビルドからのものか。
ここではいくつかの例を示します。
Ubuntuでは、プロセスが実行可能ファイルを実行するとき、および実行可能ファイルを上書きするときに、、、およびそのソースコードを介して手動で再インストールすることによりconfigure
、プロセスは新しい実行可能ファイルではなく、元の実行可能ファイルを実行し続けます。make
make install
Windwos 10では、プロセスが実行可能ファイルをサービスとして実行するときに、msi
インストーラーファイルを介して実行可能ファイルを再インストールすると、サービスプロセスが再起動して新しい実行可能ファイルを実行すると聞きました。UbuntuまたはDebianの.debファイルからインストールする場合と同じまたは同様のケースですか?
ありがとう。
カーネルと実行可能ファイルの種類によって異なります。実行可能ファイルがどのように開始またはインストールされたかには依存しません。
Linuxの場合:
ネイティブ実行可能ファイル(つまり、カーネルによって直接実行されるマシンコードを含むバイナリ)の場合、実行中に実行可能ファイルを変更することはできません。
$ cp /bin/sleep .
$ ./sleep 999999 &
$ echo >sleep
sh: 1: cannot create sleep: Text file busy
実行可能ファイルを削除(つまり、リンクを解除)して、同じパスに新しい実行可能ファイルを作成することができます。ファイルが開いたまま削除される他の場合と同様に、実行可能ファイルを削除しても実行中のプロセスには影響せず、ファイルが使用されなくなるまで、つまり実行中のすべてのインスタンスが実行されるまで、実際にはディスクから削除されません。プログラムが終了します。
スクリプト(で始まる#!
)の場合、プログラムの実行中にスクリプトファイルを変更できます。それがプログラムに影響を与えるかどうかは、インタプリタがスクリプトをどのように読み取るかによって異なります。実行を開始する前にスクリプト全体を独自のメモリに読み込む場合、実行は影響を受けません。インタプリタがオンデマンドでスクリプトを読み取ると、実行に影響が出る可能性があります。のいくつかの実装はsh
それを行います。
他の多くのUnixシステムはこのように動作しますが、すべてではありません。IIRCの古いバージョンのSolarisでは、ネイティブ実行可能ファイルを変更できます。これにより、通常、実行可能ファイルがクラッシュします。HP / UXを含むいくつかのUnixバリアントでは、現在実行中のネイティブ実行可能ファイルを削除することさえできません。
ほとんどのソフトウェアインストールプログラムは、既存のバイナリを上書きするのではなく、新しい実行可能ファイルを配置する前に、既存の実行可能ファイルを削除するように注意します。例:
rm /bin/target
cp target /bin
だけでなくcp target /bin
。install
シェルコマンドは、このようなことを行います。ただし、これは理想的ではありません。プロセスの実行/bin/target
中に誰かが実行しようとすると、cp
プログラムが破損するためです。ファイルを一時的な名前にコピーしてから、最終的な名前に名前を変更することをお勧めします。ファイルの名前を変更する(つまり、同じディレクトリ内に移動する、またはより一般的には同じファイルシステム内に移動する)と、前のターゲットファイルが存在する場合は削除されます。dpkg
たとえば、これがどのように機能するかです。
cp target /bin/target.tmp
mv /bin/target.tmp /bin/target
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加