Macでコマンドをテストしようとしてもrenice
効果がないようです。これが私がテストした方法です:
ハイパースレッディング機能を備えたデュアルコアCPUがあり、6つのインスタンスを実行しており、node -e 'while(1){}'
CPUをたくさん食べます。 (またはwhile true; do echo running > /dev/null ; done
ノードがない場合は実行します。)
次に、Activity Monitorアプリを介してノードプロセスの1つのPIDを取得またはpgrep
実行しますsudo renice -n 19 -p $PID
。
Activity Monitorアプリを確認するか、次の方法でhtop
すべてのノードプロセスのCPU使用率が変わりません。
renice
私のプロセスは優先順位が低いため、他のプロセスがそれを使用しているときにCPU時間をあまり使用しないことを知っています。
私は何かを誤解しましたかrenice
?それともmacOSのバグですか?
答え1
いくつかの基本的なテストを実行すると、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)
.Nicerenice(8)
値が増加し、優先順位値が増加し、CPU比率が減少することがわかります。これは予想される動作です。
macOS 10.13.4で同じプログラムを実行し、プロセスを繰り返しました。 Nice値が増加することがわかりますが、優先順位値とCPU比は一貫して保持されます。
これがバグかどうか疑問に思いましたが、以前はmacOSでNice値をこう詳しく調べる理由はありませんでした。動作が予想したものに十分近いため、調査する意向はありません。
開発者アカウントがある場合は、Appleに報告することをお勧めします。