![简单 Bash 脚本的模糊/不确定行为](https://linux22.com/image/207547/%E7%AE%80%E5%8D%95%20Bash%20%E8%84%9A%E6%9C%AC%E7%9A%84%E6%A8%A1%E7%B3%8A%2F%E4%B8%8D%E7%A1%AE%E5%AE%9A%E8%A1%8C%E4%B8%BA.png)
[root@localhost ~]# time cpumode
Driver: acpi-cpufreq
Boost: disabled
Governor: ondemand
Average and maximum frequencies now: 2159MHz 2929MHz
Maximum allowed frequency is 3800MHz (out of 4928MHz)
real 0m0.214s
user 0m0.017s
sys 0m0.011s
[root@localhost ~]# time cpumode
Driver: acpi-cpufreq
Boost: disabled
Governor: ondemand
Average and maximum frequencies now: 2431MHz 2738MHz
Maximum allowed frequency is 3800MHz (out of 4928MHz)
real 0m0.024s
user 0m0.018s
sys 0m0.013s
脚本运行所需的时间几乎有一个数量级的差异,而且是随机发生的。
不知道怎么可能。启用调试(取消前两行注释)时,脚本总是在 0.134 秒左右执行。
如果这在您的 PC/笔记本电脑上无法重现,请不要打扰。这是我一生中从未见过的奇怪现象,我无法解释。我可以通过以下方式运行它strace -f -t
,但这不是我现在愿意做的事情;-)
在 Linux 5.19.4 中,我无法再重现此行为。
答案1
我也得到了类似的差异,这似乎与跨 CPU 调度进程的方式有关。
在“慢速”运行时,我得到的输出如下
./cpumode > /dev/null 0.03s user 0.01s system 19% cpu 0.189 total
或者
0.03user 0.01system 0:00.20elapsed 21%CPU (0avgtext+0avgdata 4004maxresident)k
0inputs+0outputs (0major+5720minor)pagefaults 0swaps
(分别使用zsh
stime
和 GNU time
;重定向到> /dev/null
两者,因为我不关心输出并消除终端延迟(如果它们是一个因素)。
在快速跑步时,我得到
./cpumode > /dev/null 0.03s user 0.02s system 125% cpu 0.035 total
或者
0.03user 0.01system 0:00.03elapsed 125%CPU (0avgtext+0avgdata 4092maxresident)k
0inputs+0outputs (0major+5668minor)pagefaults 0swaps
请注意 CPU 分配的差异。