3

私は現在、多くのシステムおよびプロセス情報を必要とするアプリケーションを開発しています。そのうちのいくつかは/ procからのみ入手可能であり、構造へのアクセスについていくつかの一般的な質問があります。

アプリケーションはLinux(カーネル> = 2.6)で実行され、他のUnixフレーバーのOSでは実行されません。/ proc内のすべてのデータにアクセスできるはずです。仕様がまだ明確ではないため、今何が必要かはわかりませんが、/procディレクトリ全体がアプリケーションに関連しています。


まず第一に:カーネルバージョンからカーネルバージョンに追加/削除されたすべての機能をカバーする優れたドキュメントはありますか?特に気になるのは、個々のファイルのフォーマットです。それを当然のことと思ってもいいですか?カーネルバージョン間で変更されますか?

カーネルに基づいて解析プロセスを接続することはまったく問題ではありません。バージョンごとに何が変更されたかについての適切なドキュメントが見つからなかっただけで、事前に解析エラーを見つけるのに役立ちます。


さらに:カーネルオプションによってアクティブ化/非アクティブ化できる機能の明確なリストはありますか(もちろん/ proc-feature自体を除く)?カーネルに適切なオプションが設定されている場合にのみ存在するファイル/ディレクトリのリストを探しています。

私が考えていることの例として、これはprocのマンページ(http://linux.die.net/man/5/proc)へのリンクであり、多くの優れた情報が含まれています。たとえば、いくつかのオプションには最も古いものが含まれています。それらが利用可能だったカーネルバージョン。モジュールをロードする必要があるかどうかを含むものもあります。ただし、これはすべての情報の出力形式を説明しているわけではありません。これは、解析する場合に必要なものです(たとえば、すべてのカーネルバージョンで一貫している場合や、ある時点で変更されている場合)。


私が疑問に思っている2番目のことは、照会されたプロセスが照会されている間に終了した場合にどうなるかということです。私の時間間隔はどれくらいですか?たとえば、すべての構造を読み取るプロセスのリストをフェッチし、それらを次々に解析する場合、プロセスxが読み取れる前に停止するとどうなりますか?ディレクトリが存在するかどうかを確認しても、後で1回のアプリケーション呼び出しでディレクトリが失われる可能性があります。


最後になりましたが、procをマウントしていない主要なディストリビューションはありますか?

lsmod私が理解していることから、多くの一般的なツールはやなどの/ procインターフェースに基づいているfreeので、/procはほとんど常に存在することが期待できると思います。

4

1 に答える 1

5

何も保証されていない場合でも、インターフェースは (インターフェースとは異なり)非常/procに安定しています。/sysほとんどすべての変更は下位互換性があります。少なくとも、いくつかのバージョンで使用されている場合はそうです。安全のために、文書化されたインターフェースに固執する必要があります。ファイルが存在する場合、その形式は新しいバージョンで拡張される可能性がありますが、通常は下位互換性がある方法で拡張されます (テーブルに列を追加するなど)。最も消滅の危機に瀕している部分は、ACPI や SCSI などのハードウェア サスシステムに関連する部分であり、移行が進んでいます/sys(両方が存在する場合は移行期間が長くなります)。

ハードウェア情報を除いて、ほとんどの情報はアーキテクチャに依存しません (たとえば/proc/cpuinfo、異なるアーキテクチャでは非常に異なるフィールドがあります)。

主なドキュメントはDocumentation/filesystems/proc.txtカーネル ソースにあります。proc(5)概要であり、詳細であると考えてproc.txtください。カーネルのドキュメントはしばしば不完全なので、ソースを読まなければならない場合があっても驚かないでください。

のほとんどのオプション部分は/proc、データを公開するドライバーがカーネルに含まれている場合、デフォルトでアクティブ化されます。例外は主に、カーネルの外部からアクセスする必要がほとんどないハードウェア機能に関連しています。これらの機能にアクセスする必要がある場合は、さらに深く掘り下げる必要があることをすでに予想しているでしょう。Kconfig詳細については、カーネル ソース内のファイルを参照してください。

プロセス データ (またはリムーバブル ハードウェアに関連するハードウェア データ、またはアンロード可能なモジュールによって提供されるハードウェア データ) は、あなたの目の前で消えてしまう可能性があります。ほとんどのファイルは、適切なサイズのバッファーを使用/procして 1 回の呼び出しでアトミックに読み取ることができます。read複数の呼び出しを順番に実行する場合read、ドライバーは整形式のデータを取得することを保証するはずです。別々のファイルの読み取り間の原子性を保証する方法はありません。プロセスに関する情報を読んでいる場合、このプロセスはいつでも終了する可能性があり、原則として、終了する前に同じ PID を持つ別のプロセスに置き換えることさえできます。

の説明にあるように/proc、「ここでは全員が Y と言うべきです」。すべてのデスクトップ/サーバー Linux システムとほとんどの組み込み Linux システムには/proc; psおよびその他のプロセス管理コマンド、多くのファイルシステムおよびデバイス関連のツール、モジュールのロードなど、多くのことが必要です。省くことができる唯一のシステムは/proc、単一のハードウェア構成をサポートし、固定された一連のプログラムを実行する非常に小さな単一目的の組み込みシステムです。ここにあると信頼できます。

于 2012-02-03T16:15:29.313 に答える