2009-04-03 6 views
72

コンソール/端末ビューをアプリケーション出力にどのように添付して、何が表示されるのか確認できますか?プロセス出力に接続して表示する

アプリケーションを強制終了せずにアプリケーション出力からどのように切り離すことができますか?

通常、コマンドラインを使用して多彩なアプリケーションを起動すると、すばらしい出力がすべて表示されます。しかし、私はKINOのように実行中のプログラミングが特に面白いと言いますが、コマンドラインで再起動することなく、いつでもその出力を見たいと思っています。

+1

プロセスにデバッグシンボルがありますか?それは生産環境で実行されますか?もしそうなら、あなたはそれを決して一時停止させる必要がありますか? –

+0

キノのようなエンドユーザープログラムで安定性の問題が発生したとき(クラッシュして私のサウンドを殺す)、私はそれがどのように/なぜクラッシュしたのかを知ることができるようになりました。これは私が開発しているプログラムではなく、トラブルシューティングのために知りたいテクニックです。私はあなたの提案を以下に試してみます。 – aggitan

答えて

6

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

別のオプションは、テキストベースの端末アプリケーションの一種である 'screen'の内部でプログラムを起動することです。画面セッションは接続と切り離しが可能ですが、名目上は同じユーザーだけが使用するように意図されているため、ユーザー間で共有したい場合は大変です。

+0

"ここにはいくつかのオプションがありますが、コマンドの出力をファイルにリダイレクトしてから、そのファイルにリアルタイムで追加された新しい行を表示するために 'tail'を使います。 実行中のアプリケーションでこれを行うことはできますか? – aggitan

+2

おそらくtail -f $ log_fileがファイルに書き込まれるときに出力を取得する必要があります。 また、既に実行中のアプリでこれを行う方法がわかりません。 – Varkhan

+0

@aggitan:いいえ。既存のアプリケーションの場合は、既にI/Oを制御端末にバインドしているため、再起動する必要があります。 –

4

にはどうすればいいので、私はそれを言っても かを見ることができます アプリケーションの出力に コンソール/ターミナル・ビュー「を添付する」でしょうか?

この質問については、processusを起動する前にsceenコマンドを起動していなくても、出力をキャッチすることができます。

私はそれを試したことはありませんが、GDBの使い方(およびプロセスを再起動せずに)を説明する興味深い記事を発見しました。

redirecting-output-from-a-running-process

基本的には:

  1. あなたのプロセスのために開いているファイルのリストを確認し、の/ proc/XXX/FD
  2. のおかげでGDB
  3. あなたのプロセスをアタッチしながら一時停止して、興味のあるファイルを閉じ、close()関数を呼び出すあなたのプロセスの機能をGDBで行うことができます。あなたのプロセスでデバッグシンボルが必要だと思う。)
  4. ()またはopen()関数を呼び出す新しいファイルを開きます。デタッチプロセスを
  5. を(あなたは、人々が同じハンドルが使用中になることを確認するためにdup2の()を使用することをお勧め参照してくださいよ、終わりのコメントで見てください)、実行中にしましょう。ところで

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

私はこれと同じものを探して、あなたが行うことができていることがわかった
28

strace -ewrite -p $PID 

ないあなたが必要な正確に何が、

そのかなり近い

私はリダイレクト出力が、そのdidntの仕事を試してみました mabyはプロセスがソケットに書き込んでいたので、私は夢ではない

+0

非常に便利なコマンド、ありがとう。 – lenhhoxung

177

私はもっと単純な解決策を持っていると思います。擬似ファイルシステムの下であなたが探しているPIDに対応するダイレクトイヤーを探してください。アクセスできないder /procパス。ですから、そのID 1199でプログラムを実行、それにCDを持っている場合:

$ cd /proc/1199 

その後

$ cd fd 

の下fdディレクトリを探し、このfdディレクトリには、ファイル・ディスクリプタを保持してプログラムすることをオブジェクト使用している(0:標準入力、1:標準出力、2:標準エラー出力)とちょうどtail -fあなたが必要とする1 - この場合は、標準出力):

$ tail -f 1 
+8

私の場合、出力が別の入力プロセスにリダイレクトされたように 'tail'を使用することができませんでしたが、' more'は私に現在のデータを示しました。 –

+0

@Ωmega - リダイレクトしているプロセスを見つけられず、その後は標準入力(/ proc /#/ 0)になっていませんか? –

+0

私の環境では、実際に 'tail'はどのようなシナリオでも' head'と 'more'のみでは動作しませんでした... –

0

は私がリモートで望みましたあなたがvcsa2を使用したいと思い明らか

腕時計猫の/ dev/vcsa1

は:これを行うには、おそらくより効率的な方法があった一方で、ここで私がやったことですので、ローカルで実行されていたのyumアップグレードプロセスを見ます、vcsa3など、どの端末が使用されているかによって異なります。

私の端末ウィンドウがコマンドが実行されていた端末と同じ幅であれば、2秒ごとに現在の出力のスナップショットを見ることができました。他の場所で推奨されている他のコマンドは、私の状況では特にうまく動作しませんでしたが、それはトリックでした。

関連する問題