1. ホーム
  2. c

[解決済み] 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

あなたはおそらく utimestime . また cpu の行を /proc/stat のように見える。

cpu  192369 7119 480152 122044337 14142 9937 26747 0 0

これは、さまざまなカテゴリで使用された累積CPU時間を、ジフという単位で教えてくれるものです。 この行の値の合計を取ることで time_total メジャーを得るために、この行の値の合計を取る必要があります。

両方読む utimestime を読み、興味のあるプロセスに対して 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);

意味をなす?