ロギング出力の「プロセスID」を標準出力にインポートするには?

ロギング出力の「プロセスID」を標準出力にインポートするには?

出力をstdoutにダンプするすべてのプロセスのPIDを取得する方法。

ベストアンサー1

すべてのプロセスは標準出力を持ち、それに書き込むことができます。標準出力が現在端末であるプロセスを見つけるには、Linuxで次のものを使用できます。

find -L /proc/[0-9]*/fd/1 -prune -samefile /dev/stdout

似たような

find -L /proc/[0-9]*/fd/2 -prune -samefile /dev/stdout

標準エラーが現在端末であるプロセスが認識されます。 2つを組み合わせることができます。

find -L /proc/[0-9]*/fd/[12] -prune -samefile /dev/stdout

しかし、これは実際に現在の端末に書き込んでいるかどうかを伝えません。

標準出力に記録されているすべてのPIDを実際に記録するには、次のものを使用できます。bpftrace、カーネルがeBPFをサポートしている場合(現在、多くの展開カーネルがeBPFをサポートしています。を参照)カーネルbpftrace要件細部):

sudo bpftrace -e 'kprobe:ksys_write /comm != "bpftrace" && arg0 == 1/ { printf("PID %d writing to stdout\n", pid); }'

これは、独自の書き込みを除くすべての書き込みを標準出力(ファイル記述子1)bpftraceに書き込みます(bpftraceプログラムは標準出力に書き込むために独自に書き込まれるため終了します)。

おすすめ記事