2

psutil.process_iter() には何が含まれていますか? キャッシュされたインスタンスであるため、その時点で実行されているプロセスのみが含まれますか、それともすべてが含まれ、現在のステータスはユーザーが検証したままになりますか? 私のコード:

for _process in psutil.process_iter():
    try:
        new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid', 'status'])
    except psutil.NoSuchProcess:
        continue

ここでフィルタリングされるすべてのステータスは何ですか? そして、私は自分で何を確認しなければなりませんか?

4

2 に答える 2

0

psutil.process_iter()言うためのドキュメント

ローカル マシンで実行中のすべてのプロセスの Process クラス インスタンスを生成する反復子を返します。すべてのインスタンスは一度だけ作成され、要素が生成されるたびに更新される 内部テーブルにキャッシュされます。強調は私のものです

ここで、「実行中」は、ゾンビ プロセスを返す.is_running()メソッドによって定義されます。プロセスがなくなり、その pid が再利用された場合でも、安全に使用できます。True.is_running()

私の理解では_process.is_running()、現時点ではそれが真実ですpsutil.process_iter()。原則として_process.as_dict、情報を返送する前に、いくつかのことが発生する可能性があります。

  1. プロセスが停止する可能性があります -- ゾンビになる:_process.is_running()は真でpidありstatus、意味があります
  2. リープされる可能性があります -- デッドデッド: プロセス情報が利用できない (psutil.NoSuchProcess例外) または古い (キャッシュされている場合)
  3. その pid は再利用される可能性があります。一部のメソッドは、新しいプロセス_processの情報を誤って返す可能性があります。はいくつかのプロセス属性を使用するため、が再利用されたときにケースを検出する必要があります。.is_running()pid

通常、OS はpidすぐに再利用しないため、p.3 が頻繁に発生することはありません。

于 2014-04-01T14:54:45.747 に答える