2011-08-15 17 views
1

UNIXシステムでは、/ procからデータを読み込んでシステムを動的に監視することができます。私は、アプリケーションにこの種の監視を実装することを望んでおり、動的に "現在の状態"をファイルに保存しています。しかし、私はIOが自分のプログラムを遅らせることは望ましくないので、ファイルを仮想化する、つまりディスクに格納せずに実際にメモリに格納するのが最善の方法です。 dointの方法はありますか?ヒントありがとう!動的にプログラムの状態を監視する

答えて

3

なぜ共有メモリとセマフォを使用しないのですか。出発点として 'man shmget'を行います。

+0

共有メモリとセマフォは、実際にパフォーマンスが低下します。 –

+0

私は単純な監視アプリケーションが毎秒共有メモリをチェックできると思ったでしょう。アプリケーションは、共有メモリに刻々と増加していく数のスレッドを持つことができます。監視アプリケーションは、それが確実に増加していることを確認するだけです。 –

0

お試しFUSE仮想ファイルシステムの作成に特に役立ちます。すでに多くのファイルシステムがあります。

0

あなたの正確な要件はわからないので推測できますが、Linuxの下にあるすべてのファイルは/ dev/shmに置かれます。しかし、それはI/Oを実行していないわけではなく、I/Oが高速であるということだけです。ファイル記述子などでI/Oを行いたくない場合は、他の誰かが共有メモリセグメントを提案して使用するようにしてください。しかし、これは誰もが読むのが少し難しくなります。他のプログラムを開いて読み込み、プログラム内のいくつかの関数を呼び出す(これはカーネル空間で/ procによって行われます)ことはできません。また、ファイルシステムのソケットやFIFOは、あなたのニーズにもっと適したものです(例えば、選択/(e)ポーリングルーチンがある場合など)。あなたがシステムを完全に制御できたら、tmpfsも役に立つかもしれません。

1

また、アプリケーションをソケットサーバーにすることもできます。このようにすると、要求された場合にのみ状態情報で応答することができます(現在の状態でメモリ領域を更新し続ける必要もなくなります)。また、リモートマシンからプログラムを制御することもできます。ステータス自体が膨大な量のデータでない場合は、これが最も柔軟なソリューションだと私は思っています。

アプリケーションがHTTP要求に応答するようにしても(すべてのhttpプロトコルの可能性をサポートしているわけではありません)、クライアントに書き込むことを避けることもできます。とにかくそれを書くことは、おそらくそれを行うことができるライブラリとプログラマーを見つける方が簡単でしょう。

ポート80を聞いてみると、インターネット経由でプログラムをチェックしても、ファイアウォールを無駄にすることはありません:-)(まあ...プログラム自体がインターネットから届いていることを前提にしていますが、システム管理者に求められる共通の事柄)。

関連する問題