生成されたプロセスの総数を計算するには、/proc/loadavg を使用します。

生成されたプロセスの総数を計算するには、/proc/loadavg を使用します。

Red Hat Linux 8 OSで出力を確認しcat /proc/loadavg、「5.20 5.78 8.04 16/1596 1954863」を取得しました。 4分後に出力を
再確認し、「7.05 7.33 8.11 3/1605 2071966」を受け取りました。 2つの出力の最後の値である2071966 - 1954863 = 117103の差を計算しています。/proc/loadavg

これは、4分間隔でシステムが117103の新しいプロセスを作成したことを意味しますか?

ベストアンサー1

2つの出力の最後の値である2071966 - 1954863 = 117103の差を計算しています。これは、4分間隔でシステムが117103の新しいプロセスを作成したことを意味しますか?

いいえ、本当です。不要意味は、なぜならPIDの割り当て方法。 (*)
pid がカーネルに達すると、/proc/sys/kernel/pid_maxカーネルは 300 から始まり未割り当ての pid を検索します。

したがって、最後の再起動後にシステムが少なくとも1回以上pid_maxに達すると、計算は意味をなさなくなります。
しかし、これが不可能であると合理的に仮定できれば、そうです。あなたの計算は実際に正しいです。


OPのコメントであなたの質問の更新を見つけました。はい。異なる時間に報告された値の差を計算することは、/proc/stat/processes確実に信頼できる情報を取得する方法です。この値は

発売後のフォーク数

この言葉に注意してくださいフォーク明示的に言及しました。実際に数量を表す数字は何ですか?プロセス元の意味(およびファイル名)はあなたのものかもしれません。
ただし、これはマルチスレッドプロセスによって生成されたスレッドを暗黙的に除外します。。 (システムコールによって生成されないため、fork()スレッドは予約可能なエンティティであるため、対応するID(スレッドID)は利用可能なPIDのリストから取得されます

    10番目(シングルスレッド)プロセスフォーク:PID = 10 TID = 10
    11番目(マルチスレッド)プロセスフォーク:PID = 11 TID = 11
      最初のスレッドはPID11によって生成されます:TID = 12
      2番目のスレッドはPID11によって生成されます:TID = 13
    12番目のプロセスフォーク:PID = 14 TID = 14

その後、計算に従って/proc/stat/processes報告されます。サム
微積分レポートに基づいて、/proc/loadavg14 - 10 = 4(極端なケースを説明するために+ 1)=5実際にスレッド数を報告します(pidmaxに達していないと仮定)。

結論:必ず言いたいことならプロセス元の意味では、ベースの微積分は、/proc/stat/processes可能なpidmaxに達するかどうかにかかわらず、望ましい結果を提供します。
実際に数量を意味する場合/proc/loadavg、以下に基づく微積分学起動後にシステムがpidmaxに達したことがないと仮定できる場合、そうでなければ意味がありません。


(*)提供された例は単純化のためのものです。 2.5カーネル以降、状況は確実に変わりましたが(効率性が向上しました)、主なアイデアはまだ同じです。

おすすめ記事