6

Linux で、別のプロセスの出力 (stdout および stderr から) を認識せずに読み取ることは可能ですか? では、バックグラウンドでプロセス A を実行していて、プロセス B がその出力を読みたいとしましょう。それは可能ですか? パイプやスクリーンプログラムが使えません。/proc/xxx/fd や /pts/x コンソールなどから読み取ろうとしましたが、これまでのところ何も機能しませんでした。

4

3 に答える 3

1

私はあなたがカーネルコードを書くつもりはないというあなたの質問の意味を読みました、そしてその考えはあなたがスパイしている実行可能ファイルを変更することではありません。

これらの制約を考えると、答えは簡単です。いいえ、あなたがすることはできません。プロセスはwrite(1またはwrite(2を呼び出します。これらはどこにでも移動できます。また、途中のトラフィックを確認するのに役立つ「盗聴」プロビジョニングはシステムに組み込まれていません。

于 2010-07-02T02:38:00.527 に答える
1

カーネルでは、読み取りと書き込みをフックして必要なものを取得するドライバーを作成できると思います。

ユーザー空間では、stdout と stderr の出力を、プロセスとスレッド ID などとともにいくつかのファイルにログアウトする、変更された glibc をコンパイルできます。しかし、何かを壊すと危険です。(トレースしたいアプリケーションが静的にリンクされていないか、カーネルに直接システムコールを行っていないと仮定します)

于 2010-06-30T11:51:55.877 に答える
-1

dup2関数を使用するだけで:

int b_fd; /* This is the B process File descriptor*/
int a_fd /* This is the A process File descriptor*/  

 int main (int argc, char*argv[]){
     /** I suppose that you can init the file descriptor for A*/
     dup2( b_fd, a_fd);
     /**Now everything that A will output will be written in B file descriptor*/

  }
于 2010-06-30T13:21:32.580 に答える