実行中のコマンドの最新の出力を取得する

実行中のコマンドの最新の出力を取得する

長い間実行されているコマンドがありますが、それを妨げたくありません。しかし、プロセスを確認し続けたい(ほとんどの場合はリモートで)。topなどの命令でプロセスを継続的に監視しています。プロセスはターミナルベースのプロセスであり、同様のコマンドでは開始されません。したがって、出力を確認する唯一の方法は、物理アクセスを使用することです。iotopstatscreentmux

私はそれが/procそのプロセスに関する多くの情報を含んでいることを知っています。したがって、出力(または出力の最後のバッチ(文字/単語/行))も表示できるかどうか疑問に思います。検索しましたが、/proc/<pid>/fd役に立つコンテンツが見つかりませんでした。

以下は出力ですls -l /proc/26745/fd/*

lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/0 -> /dev/pts/17
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/1 -> /dev/pts/17
lrwx------ 1 user user 64 Sep 27 22:27 /proc/26745/fd/2 -> /dev/pts/17

どんなアドバイス?

答え1

私はstraceそれを使用します:

strace -qfp PID -e trace=write -e write=1,2

これはwrite(2)、PIDとその子プロセスに対するすべてのシステムコールを追跡し、ファイル記述子1と2に書き込まれたデータを16進ダンプします。

もちろん、このプロセスではわかりません。すでにtty に書き込みますが、ある時点からすべての書き込みが監視されます。

また、strace出力形式の変更には適していません。より柔軟性が必要な場合は、gdb(1)小さなプログラムを使用または作成することをお勧めします。ptrace(2)

関連情報