130

コンソール/ターミナルビューをアプリケーション出力に「アタッチ」して、それが何を言っているかを確認するにはどうすればよいですか?

アプリケーションを強制終了せずに、アプリケーションの出力から切り離すにはどうすればよいですか?

通常、コマンドラインを使用しておしゃべりなアプリケーションを起動すると、あらゆる種類のすばらしい出力が表示されます。ただし、KINOのように特におしゃべりなプログラミングを実行していて、コマンドラインから再起動せずにいつでも出力を表示したいとします。私はできません; 少なくとも方法はわかりません。

4

7 に答える 7

61

これとまったく同じことを探していたところ、次のことができることがわかりました。

strace -ewrite -p $PID

それはまさにあなたが必要としていたものではありませんが、かなり近いものです。

出力のリダイレクトを試みましたが、うまくいきませんでした。プロセスがソケットに書き込んでいたためか、わかりません。

于 2012-12-07T13:17:14.530 に答える
21

ここにはいくつかのオプションがあります。1つは、コマンドの出力をファイルにリダイレクトしてから、「tail」を使用して、そのファイルに追加された新しい行をリアルタイムで表示することです。

もう1つのオプションは、一種のテキストベースのターミナルアプリケーションである「screen」内でプログラムを起動することです。スクリーンセッションはアタッチおよびデタッチできますが、名目上は同じユーザーのみが使用することを目的としているため、ユーザー間でスクリーンセッションを共有したい場合は、お尻に大きな負担がかかります。

于 2009-04-03T21:20:31.543 に答える
8

コンソール/ターミナルビューをアプリケーション出力に「アタッチ」して、それが何を言っているかを確認するにはどうすればよいですか?

この質問については、プロセスを起動する前にsceenコマンドを起動しなかった場合でも、出力をキャッチできることを知っています。

試したことはありませんが、GDBを使用する方法(プロセスを再起動せずに)を説明する興味深い記事を見つけました。

実行中のプロセスからのリダイレクト出力

基本的に:

  1. / proc / xxx / fdのおかげで、プロセスの開いているファイルのリストを確認してください
  2. プロセスをGDBにアタッチする
  3. 一時停止している間に、目的のファイルを閉じて、 close()関数を呼び出します(GDBでプロセスの任意の関数を使用できます。プロセスにデバッグシンボルが必要だと思われます)。
  4. create()またはopen()関数を呼び出して新しいファイルを開きます。(最後のコメントを見てください。同じハンドルが使用されるように、dup2()を使用するように提案されていることがわかります)
  5. プロセスを切り離して実行します。

ちなみに、i386ボックスでLinux OSを実行している場合、コメントは出力を新しいコンソールにリダイレクトするためのより良いツールについて話している:'retty'。もしそうなら、その使用を検討してください。

于 2009-04-03T22:38:00.967 に答える