コンソール/端末ビューをアプリケーションの出力にどのように「添付」して、それが何を言っているのかを見ることができますか?
アプリケーションを強制終了せずに、アプリケーション出力からデタッチするにはどうすればよいですか?
通常、コマンドラインを使用しておしゃべりなアプリケーションを起動すると、あらゆる種類の素晴らしい出力が表示されます。ただし、KINOのような特におしゃべりなプログラミングを実行しており、コマンドラインから再起動せずに、任意の時点で出力を表示したいとします。私はできない;少なくとも、私には方法がわかりません。
ここにはいくつかのオプションがあります。 1つは、コマンドの出力をファイルにリダイレクトし、「tail」を使用して、そのファイルにリアルタイムで追加される新しい行を表示することです。
別のオプションは、「スクリーン」内でプログラムを起動することです。「スクリーン」は、一種のテキストベースのターミナルアプリケーションです。スクリーンセッションはアタッチおよびデタッチできますが、名目上は同じユーザーのみが使用することを意図しているため、ユーザー間でスクリーンセッションを共有したい場合は、面倒です。
ここでもっと簡単な解決策があると思います。 /proc
パスでアクセスできる擬似ファイルシステムの下で、探しているPIDに対応する名前のディレクトリを探します。そのため、IDが1199であるプログラムを実行している場合、cd
がそれに含まれます。
$ cd /proc/1199
次に、下のfd
ディレクトリを探します
$ cd fd
このfd
ディレクトリには、プログラムで使用しているファイル記述子オブジェクト(0:stdin、1:stdout、2:stderr)と、必要なtail -f
だけが保持されます-この場合はstdout) :
$ tail -f 1
私はこれとまったく同じことを探していましたが、あなたができることがわかりました:
strace -ewrite -p $PID
必要なものではありませんが、非常に近いものです。
リダイレクト出力を試しましたが、それはうまくいきませんでした。プロセスがソケットに書き込みを行っていたためか、わかりません。
コンソール/端末ビューをアプリケーション出力に「添付」して、それが何を言っているのかを見ることができますか?
この質問について、processusを起動する前にsceenコマンドを起動しなかった場合でも、出力をキャッチできることがわかっています。
試したことはありませんが、GDBを使用して(プロセスを再起動せずに)行う方法を説明する興味深い記事を見つけました。
基本的に:
ところで、i386ボックスでLinux OSを実行している場合、コメントは出力を新しいコンソールにリダイレクトするためのより良いツールについて話している: 'retty'。もしそうなら、その使用を検討してください。
ローカルで実行されたyumアップグレードプロセスをリモートで見たかったので、これを行うためのより効率的な方法はおそらくありましたが、次のようにしました。
watch cat /dev/vcsa1
使用されている端末に応じて、vcsa2、vcsa3などを使用したいのは明らかです。
端末ウィンドウがコマンドを実行している端末と同じ幅である限り、2秒ごとに現在の出力のスナップショットを見ることができました。他の場所で推奨されている他のコマンドは、私の状況では特にうまくいきませんでしたが、そのトリックはうまくいきました。
私にとって、これはうまくいきました:
プロセスの所有者としてログインします(root
でも許可が拒否されます)
~$ su - process_owner
他の多くの回答で述べられているように、ファイル記述子を末尾にします。
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)