我试着在我的Mac上测试renice命令,它似乎没有效果。我就是这样测试的:
我有一个带有超线程的双核CPU,所以我运行了6个node -e 'while(1){}'实例,这些实例组合在一起,使我的CPU达到最大值。(或者,如果没有节点,则运行while true; do echo running > /dev/null ; done。)
然后,通过活动监视器应用程序或pgrep获取节点进程的PID,然后运行sudo renice -n 19 -p $PID。
通过查看活动监视器应用程序或htop,所有节点进程的CPU使用率仍然相等:

我的理解是,我reniced的进程优先级很低,因此当有其他进程使用它时,不会占用大量的CPU时间。
我对renice有什么误解吗?或者这是macOS中的一个bug?
发布于 2018-05-18 08:52:45
运行一些基本测试--我也在10.13.4上看到了这一点。
我编写了一个名为looper的小型C程序,它在无限循环中做了一些基本数学:
#include <stdio.h>
int main(){
unsigned long long prev = 0;
unsigned long long current = 1;
unsigned long long total = 0;
while(1){
total = current + prev;
prev = current;
current = total;
printf("%llu\n", total);
}
}我在我的FreeBSD盒上运行了多个副本,并使用htop(1)对它们进行了检查。使用renice(8),我可以看到尼斯值增加,优先级值增加,CPU百分比下降-预期行为。
我在macOS 10.13.4上运行了相同的程序,并重复了这个过程。虽然我可以看到尼斯值在增加,但优先级值和CPU百分比保持一致。
我想知道这是否是一个bug,我以前没有理由这么仔细地查看macOS中的尼斯值--它的行为已经足够接近我预期的结果了,所以我不愿意进行研究。
如果你有一个开发者帐户,这将是值得报告给苹果。
https://unix.stackexchange.com/questions/442470
复制相似问题