8

可能性が非常に低いことは知っていますが、nohupされたプロセスが最近何を出力しているかを確認する方法はありますか?

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

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

乾杯

4

1 に答える 1

8

方法はありますが、簡単ではありません。トリックは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)と、openから返された新しいファイル記述子の両方を交換可能に使用できることを意味します。これにより、stdoutとstderrに送られるすべての出力が開いたファイルに送られます。

于 2010-11-24T10:55:58.457 に答える