リンクされたコマンドはアトミックですか?

リンクされたコマンドはアトミックですか?

常にファイルに書き込むプロセスがあり、rootでファイルを制御したい場合は、次のようにします。

sudo rm somefile; sudo touch somefile

これら2つのコマンドの間にファイルに追加のプロセスを追加できますか?それでは、その間に他のコマンドが実行されないようにする方法はありますか?

ベストアンサー1

リンクされたコマンドラインは基本的に小さなシェルスクリプトです。通常のfork + execプロセスを使用して最初のコマンドを実行し、終了するのを待ってから、同じ方法で2番目のコマンドを実行します。これら2つのコマンドの間では、シェルは記録と処理にランダムな時間を費やします。この間、一般的な複数の処理が発生し、他の任意のプロセスが他の任意の操作を実行できます。だから答えは「いいえ」です。 (これを行うと、ディレクトリエントリはsomefile消えますが、ファイル自体は閉じられるまで(プロセスによって開かれたため)まだ存在します。それまでは、ファイルが使用するディスク容量を回復しません。同時に、このtouchコマンドは同じ名前とパスを持つ関連ない新しいファイルを生成します。

ファイルの所有権をrootに変更するには、これを行うことができますsudo chown root:root somefile(これが開かれたファイルハンドルを持つプロセスにどのような影響を与えるかはわかりません)。現在のファイルの内容を削除するには、次のことを試してくださいtruncate -s 0 somefile(実行中のプロセスは現在空のファイルに追加され続けます)。他のことなら何をしたいのかを明確にしてください。

おすすめ記事