Linux のトップ コマンドのように動作するように、C/C++ でプログラムを作成しようとしています。私はいくつかの調査を行い、プロセスのCPU使用率をカウントする方法をすでに知っています。現在時刻と数秒後の /proc/[PID]/stat から stime + utime を計算することで、CPU 使用率を取得できます。次に、stime + utime の差を計算し、その結果をアップタイムの差で割ると、CPU 使用率が得られます。シングルプロセス/マルチスレッドプロセスではとても簡単です。
問題は、マルチプロセスとして動作する httpd のような場合です。Web サーバーがビジー状態になると、httpd は子プロセスを fork して一連のリクエストを処理します。次に、合計プロセス数を数えます。たとえば、500 とします。これらのプロセスの CPU 使用率を計算したいのですが、それらを要約すると、1 つの httpd CPU 使用率しか表示されません。しかし、上記のようなアルゴリズムを実行すると、数秒後にプロセス数が 500 未満に減少すると、計算が次のようになるため、負の値が得られます (たとえば、乱数を選択して、簡単な説明をしてください):
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
上記の例を見ると、Stime + Utime のデルタは、プロセスの数が減少するため、負の値になり、数ミリ秒後に低い値になります。私が知りたいのは、このようなプロセスを計算する他の方法はありますか? ありがとうございました。