2011-12-05 4 views
2

シナリオは次のとおりです(まだコードはありません)。Linuxプロセスはwhileループで永遠に実行されます。プロセスはC/C++(POSIX)で実装されています。このプロセスは、いくつかのデータをstd :: vectorに保持します。実行中のLinux Cプロセスのコマンドラインデータを介して印刷

myvector.push_back("test1"); 
myvector.push_back("test1"); 
myvector.pop_back(); 
myvector.push_back("test1"); 

プロセスが実行され、ベクターが変更されます。私は特定のコマンドライン引数でバイナリを実行するときにベクトル値を出力する仕組みを探しています。

「myprocess」と呼ばれる処理が実行されているとします。 ./myprocess -debugのような新しいシェルから同じバイナリを実行し、STLコンテナの値を出力したいと思います。

+0

デバッガを検討する – Walter

+0

これは本番システム用です – cateof

+0

これはコンパイルされますか? 'std :: vector'は' pop() 'メンバ関数を持っていません。 –

答えて

4

通常、「別のプロセスのメモリを印刷する」ことはありません。あなたがしていることは、他のプロセスにベクトルの内容を印刷するように求める信号を送ることです。

この場合、POSIX signal(例:SIGUSR1)を使用できます。

さらに柔軟なアプローチは、プロセスが名前付きパイプ(またはTCPポート)でリッスンし、その上でコマンドを受け入れることです。 1つのこのようなコマンドは、ベクターの内容を印刷することができる。

1

(@aixの最後の提案を完成させるために)

あなたがmyprocessのソースを持って、それを強化することができます、あなたはその中にいくつかのサーバーの能力を追加したと仮定すると。

たとえば、要求を理解できるHTTPサーバー(例:Onion HTTP server library)にすることができます。これらのリクエストには、スクリプト言語(luaなど)が含まれていても、それを処理するためのインタープリタを組み込むことができます(別のスレッドなど)。その場合は、同期の問題を処理してください(たとえば、アクセスしたデータをmutexまたはread-writeロックでロックするなど)。

HTTPプロトコルを使用する利点は、ブラウザを使用してアプリケーションを検証できることです。 (しかしセッション、認証などを処理する必要があるかもしれません)。

また、独自のプロトコル、またはRPC-XDR、CORBA、などなど

あなたはまた、(例えば、Luaの中で)、単一の要求を受け入れることができ、行ごとに、telnetスルーを使用することができます。

そして、あなたは一般的にposix shm

を使用して共有メモリ・セグメントの外側に表示されるようにデータを置くかもしれませんが、このような仕様変更は、いくつかのソフトウェアアーキテクチャの変更

詳細は単純ではないかもしれない...

が必要です
関連する問題