[解決済み] LinuxでC言語からPIDによるプロセスのCPU使用率を計算するには?
2023-01-02 11:28:04
質問
Linuxで、与えられたプロセスIDのCPU使用率をプログラム(C言語)で計算したいのですが。
与えられたプロセスのリアルタイムの CPU 使用率 % を取得するにはどうすればよいでしょうか。
さらにわかりやすくするために
- 提供された processid またはプロセスの CPU 使用率を判断できるようにする必要がありますね。
- プロセスは子プロセスである必要はありません。
- C言語での解答を希望します。
どのように解決するのですか?
からのデータを解析する必要があります。
/proc/<PID>/stat
. これらは、最初のいくつかのフィールド (
Documentation/filesystems/proc.txt
から) です。
Table 1-3: Contents of the stat files (as of 2.6.22-rc3)
..............................................................................
Field Content
pid process id
tcomm filename of the executable
state state (R is running, S is sleeping, D is sleeping in an
uninterruptible wait, Z is zombie, T is traced or stopped)
ppid process id of the parent process
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flags
min_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
utime user mode jiffies
stime kernel mode jiffies
cutime user mode jiffies with child's
cstime kernel mode jiffies with child's
あなたはおそらく
utime
と
stime
. また
cpu
の行を
/proc/stat
のように見える。
cpu 192369 7119 480152 122044337 14142 9937 26747 0 0
これは、さまざまなカテゴリで使用された累積CPU時間を、ジフという単位で教えてくれるものです。 この行の値の合計を取ることで
time_total
メジャーを得るために、この行の値の合計を取る必要があります。
両方読む
utime
と
stime
を読み、興味のあるプロセスに対して
time_total
から
/proc/stat
. その後、1 秒ほどスリープして、もう一度すべてを読み込みます。 これで、サンプリング時間におけるプロセスのCPU使用率を計算することができます。
user_util = 100 * (utime_after - utime_before) / (time_total_after - time_total_before);
sys_util = 100 * (stime_after - stime_before) / (time_total_after - time_total_before);
意味をなす?
関連
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Linuxで特定のポートで動作しているプロセスを停止させる方法は?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] アプリケーションやプロセスの実際のメモリ使用量を測定するにはどうすればよいですか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] フリーは、どのように無料化を知っているのですか?
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?
-
[解決済み] Linuxで単一プロセスのCPU使用率とメモリ使用率を取得する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
C++の配列コピー
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] C - Setデータ構造を実装するには?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
-
[解決済み] ストラクチャーとユニオンの違い