UNIXシステムでは、libfaketimeはソフトウェアのこの問題に対する事実上の標準ソリューションです。これは、アプリケーションとシステムのタイムライブラリとの間で一種の中間者操作を実行します。要求はシステムに渡されますが、応答は必要に応じて変更されます。また、stat()
呼び出しの結果も変更するため、ファイルの変更時間とc。も変更されます。
設定は環境変数を使用して行われるため、環境変数の動作にまだ慣れていない場合は、環境変数について学習する必要があります。
libfaketimeは、相対オフセットと絶対オフセット、停止時間と実行時間、および加速または減速をサポートします。しかし、逆走については知りません。
現在のバージョンは、秒が現在の最高の解像度であると想定し、応答のサブ秒部分を変更せずにアプリケーションに渡すことに注意してください。したがって、クロックを半分の速度に落とすと、非常に高速の時間呼び出しを行う1秒未満のプログラムは、1秒間だけでなく1秒間全体を2回ずつ経験します。クロックが停止している場合、これはアプリケーションが選択された秒内のランダムな時間を見ることを意味します。
残念ながら、Githubは今日ダウンしているため、ドキュメントは現在利用できませんが、おそらくすぐに修正されるでしょう。
編集:
Githubをバックアップして試してみたところ、速度変更のコードが一般的なものであり、負の値またはで受け入れられる他のすべてのコードでうまく機能することがわかりましたatof()
。
ただし、別の問題が明らかになりました。速度を変更するには、実際の現在時刻と目的の時間オフセットに加えて、時刻原点が必要です。このオリジンはサブプロセスに対して個別に設定されているため、(公称速度で逆方向に実行する場合)親プロセスが1分間撤回すると、新しく生成されたサブプロセスは現在の時刻を親プロセスより2分遅れて表示します。