出力を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
プログラムは標準出力に書き込むために独自に書き込まれるため終了します)。