1

makeユーティリティはどの程度堅牢ですか?

たとえば、何かを「作成」しているときに、コンピューターの電源が切れ、次のコンピューターの起動後に作成が再開された場合、出力は正しいことが保証されますか(ファイルシステムが堅牢でない場合でも)?makeが失敗する可能性のある他の状況はありますか?

4

3 に答える 3

4

Make は、実行中にファイル システムに書き込みを行っています。したがって、実行中に中断された場合 (たとえば、コンピューターの電源が失われた場合やユーザーがプロセスを強制終了した場合)、不完全なファイルがファイル システムに書き込まれる可能性がありますが、ファイル システムにこれを防止する何らかのメカニズム (ZFS例えば)。

GNU Make 自体は、ファイルが不完全または壊れているかどうかを検出しません。タイムスタンプ付きでファイル システムに存在する限り、Make はそれが完了したと見なします。

于 2010-12-30T09:46:41.840 に答える
2

基本的に、いいえ。

Make は、目的のファイルが部分的に書き込まれている場合、状況によってはだまされる可能性があるメカニズムによって、ターゲットが「最新」であるかどうかを判断しようとします。電源に障害が発生した場合、部分的な書き込みが可能であり、OS がタイムスタンプを更新している可能性があるため、「make」が間違っている可能性があります。

make で使用されるツール (コンパイラ、リンカーなど) が、アトミック操作を使用し、すべてをディスクに同期することによって安全であることは、技術的に実現可能です。ただし、「make」が安全であるためには、すべてのツールが安全でなければなりません。

また、すべてを同期すると、おそらくコンパイルが大幅に遅くなります。

于 2010-12-30T14:33:36.650 に答える
0

GNU Makeは、その下にあるツールと同じくらい堅牢です。ターゲットに現在の日付/時刻がある場合、Makeは、部分的な出力しか含まれていない場合でも、ターゲットが完了したと見なします。

于 2010-12-30T09:30:53.570 に答える