2011-09-14 6 views
3

私は現在、多くのシステムとプロセス情報が必要なアプリケーションを開発していますが、そのうちのいくつかは/ procでしか利用できません。構造にアクセスするための一般的な質問があります。/procにアクセス

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


まず、カーネルバージョンからカーネルバージョンに加えられた/削除されたすべての機能をカバーする良い文書がありますか?私が特に興味を持っているのは、個々のファイルのフォーマットです。私は当然それを取ることができますか?カーネルバージョン間で変更されますか?

カーネルに基づいた解析プロセスのフックアップはまったく問題ではありません。バージョンからバージョンに変更されたものについては良い文書が見つからず、あらかじめ解析エラーをキャッチできます。


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

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


私が疑問に思っているもう一つのことは、プロセスが照会されている間にダイが照会されるとどうなるかということです。私の時間間隔は何ですか?たとえば、すべての構造を読み込んでいるプロセスのリストを取得し、それを次々に解析する場合、プロセスxが読み込まれる前にプロセスが終了するとどうなりますか?ディレクトリが存在するかどうかを確認しても、あとで1つのアプリケーションコールが残っている可能性があります。


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

一般的なツールの多くは、lsmodfreeなどの/ procインターフェイスに基づいているため、ほとんど常に/ procが存在すると思っています。

+0

procのどの部分が必要ですか?プロセスごとの情報または汎用カーネル情報?プロセスごとの情報は、いくつかのUnix変種(Plan9、Solaris、Irix、* BSD、Linux)やさまざまなバージョンで同じように見えます。一般的なシステム情報は別の話です。 –

+0

申し訳ありませんが、アプリケーションがLinux(カーネル> = 2.6)をターゲットにしているだけであることは忘れました。私は自分の投稿を編集しました。 – Robin

+0

しかし、どのような情報がprocから必要ですか?それの様々な部分が別々に、そして様々な品質で文書化されているからです。 –

答えて

4

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

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

メイン文書はカーネルソースのDocumentation/filesystems/proc.txtです。概要はproc(5)、詳細はproc.txtとしてください。カーネルのドキュメントはしばしば不完全ですので、時々ソースを読むことに頼る必要がある場合は驚かないでください。

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

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

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