そのようなことが起こる理由は、プログラムが「このデータを書き込んでください」と言い、Linux カーネルがそれをメモリ バッファにコピーし、ディスクに移動するためにキューに入れられ、「OK、完了」と言うからです。したがって、プログラムはすべてをコピーしたと考えます。その後、プログラムはファイルを閉じますが、カーネルは突然、バッファがディスクにプッシュされるまでファイルを待機させます。
そのため、残念ながら、プログラムはバッファをフラッシュするのにかかる時間を知らないため、知ることができません。
パワーユーザー向けのトリックを試してみたい場合は、カーネル パラメータ vm.dirty_bytes
を設定することで、Linux が使用するバッファのサイズを減らすことができます。 15000000
のようなものに (15MB)。これは、アプリケーションが実際の進行より先に 15MB を超えて取得できないことを意味します。 (カーネルパラメータは sudo sysctl vm.dirty_bytes=15000000
でオンザフライで変更できます ただし、再起動後もそれらを維持するには、/etc/sysctl.conf
のような構成ファイルを変更する必要があります これはディストリビューションに固有のものである可能性があります。)
副作用として、この設定ではコンピューターのデータ書き込みスループットが低下する可能性がありますが、全体として、プログラムが大量のデータを書き込んでいる間、プログラムが長時間実行されていることと、プログラムはその仕事を終えたように見えますが、カーネルが実際の作業を行うため、システムはひどく遅れています。設定 dirty_bytes
適度に小さい値に設定すると、空きメモリが少なくなり、突然大量のデータを書き込むプログラムを実行したときに、システムが応答しなくなるのを防ぐのにも役立ちます。
ただし、あまり小さく設定しないでください。カーネルがバッファを通常のハード ドライブに 1/4 秒以下でフラッシュできるという概算として、15MB を使用します。システムが「ラグ」を感じるのを防ぎます。