コンソールの出力を確認するためにnohupを復元/回復する方法はありますか?

StackOverflow https://stackoverflow.com/questions/4265899

質問

チャンスは非常に低いことを知っていますが、最近ノーフドプロセスが出力していることを確認する方法はありますか?

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

そのようなプロセスをコンソールに戻す方法はありますか、それとも絶望的ですか:(

乾杯

役に立ちましたか?

解決

方法はありますが、それは単純ではありません。トリックはDUP2を使用することであり、プログラムがLIBCに対してリンクされているという事実に依存します(すべてのC/C ++アプリケーションはそうですが、たとえばJavaアプリケーションはそうではありません))

  1. GDBを使用してプロセスに接続します
  2. gdbプロンプトで以下を実行して、stdoutを /tmp /newfileにリダイレクトします

    $ print dup2(open( "/tmp/newfile"、0)、1)

  3. 以下を実行して、stderrを /tmp /newfileにリダイレクトします

    $ print dup2(open( "/tmp/newfile"、0)、2)

  4. プロセスと完了からGDBを取り外します

dup2 そうです

ファイル記述子を複製すると、これは、stdout/stderr(1および2)と開いて返される新しいファイル記述子の両方を交換可能に使用できるため、すべての出力がSTDOUTに移動し、STDERが開いたファイルに移動します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top