2010-11-24 20 views
8

私はチャンスが非常に低いと知っていますが、方法はありますか? 最近、nohup-edプロセスが何を出力しているのか見てみましょうか?コンソールに出力を表示するためにnohupを復元/回復する方法はありますか?

私はまだこのプロセスを開いていますが、すべての出力を/ dev/nullにリダイレクトして実行しました。

だから、戻ってコンソールに、このようなプロセスを回復するための方法がある、またはそれは絶望的である:(

乾杯

答えて

8

ござい方法があるが、それは単純ではない、トリックがdup2のを使用することですそして

    1. (すべてのC/C++アプリケーションは次のようになりますが、Javaアプリケーションは、たとえばではないでしょう)あなたのプログラムは、libcのに対してリンクされているという事実に依存しますが、GDB
    2. を使用して、プロセスにアタッチ0に標準エラー出力をリダイレクトするには、以下の

    3. 実行する(0)、1がオープン( "を/ tmp/NEWFILE")/ NEWFILE

      $印刷dup2のを/ tmpに標準出力をリダイレクトするために、GDBプロンプトで次のように実行します/ tmp/NEWFILE

      $印刷dup2の(オープン( "を/ tmp/newfileコマンド"、0)、2)何dup2

    4. デタッチあなたのプロセスからgdbをし、あなたの

    を行ってはです10

    これは、その標準出力/標準エラー出力(1および2)の両方を意味し、ファイルディスクリプタ を複製し、新しいファイル・ディスクリプタはオープンから返されたすべての出力をファイルに行くために、stdoutとstderrに行くの原因となる交換可能に使用することができますあなたは開いた。

  • +0

    恐ろしい!決してそれを考えなかった。 – msandiford

    +0

    問題はありません、私は少し前にstackoverflowで学んだ:) – hhafez

    +0

    私はこれもjavaで動作すると思いますが、もしjvmがlibcに対してビルドされているかstdoutの互換コンセプトを持っているとします。 –

    関連する問題