我想改变一个进程的实时感知。
让进程相信时间正在以我的系统/内核/硬件时钟认为的速度的 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
启动该 shell,时钟速度是正常速度的 10 倍(休眠sleep 10
1 秒)。
可以通过使用小数乘数(例如 0.5 或 0,5(取决于您的区域设置))来减慢时钟速度伪造的倒数第二个 2真实的秒。例如参见:
faketime -f '+0 x0.5' watch date
它的工作原理是通过将代码注入到可执行文件中LD_PRELOAD
,因此不适用于静态链接的应用程序或setuid
/setgid
可执行文件,或者在清理环境或用户命名空间中执行命令的应用程序,或者在不使用 libc 系统调用包装器的情况下获取时间信息或睡眠的应用程序。