
Мне бы хотелось изменить восприятие реального времени для одного процесса.
Заставить процесс поверить, что время идет со скоростью, составляющей 50% или 150% от той, которую считает моя система/ядро/аппаратные часы.
Мне бы хотелось найти универсальное решение, которое можно было бы использовать с любой программой, без необходимости вносить исправления в исходный код программы.
Есть ли какой-либо инструмент, позволяющий достичь того, что мне нужно?
решение1
Для этого и faketime
предназначена команда. Например:
$ time faketime -f '+0 x10' sh -c 'date +%T; sleep 10; date +%T'
13:29:02
13:29:12
faketime -f '+0 x10' sh -c 'date +%T; sleep 10; date +%T' 0.00s user 0.00s system 0% cpu 1.009 total
Запустил эту оболочку, когда часы шли в 10 раз быстрее обычного (они sleep 10
замерли на 1 секунду).
Часы можно замедлить, используя дробный множитель (например, 0,5 или 0,5 (в зависимости от вашего региона) для каждогоподдельныйпредпоследние 2настоящийсекунд. См. например:
faketime -f '+0 x0.5' watch date
Это работает путем внедрения кода в исполняемые файлы с помощью LD_PRELOAD
, поэтому не будет работать для статически связанных приложений или исполняемых файлов setuid
/ setgid
или приложений, которые выполняют команды в очищенных средах или в пространствах имен пользователей, или которые получают информацию о времени или переходят в спящий режим без использования оболочек системных вызовов libc.