FreeBSD / macOSで実行されているプロセスの標準入力/出力キャプチャ

FreeBSD / macOSで実行されているプロセスの標準入力/出力キャプチャ

Linuxでは、実行中のプロセスに/proc/<pid>/fd/[0,1,2]アクセスするためにこれを頻繁に使用します。std[in,out,err]

FreeBSDおよび/またはmacOSで同じ結果を得る方法はありますか?

答え1

バラよりこのStackOverflowリンクこれに対するdtraceベースの答えです。 FreeBSDでこれをテストしましたが、うまくいきます。

    capture() {
        sudo dtrace -p "$1" -qn '
            syscall::write*:entry
            /pid == $target && arg0 == 1/ {
                printf("%s", copyinstr(arg1, arg2));
            }   
        '   
    }   

答え2

プロセスファイルシステムfdFreeBSDでも使用できますが、マニュアルページではまだ実装されていないようです。 Procfsは通常、Linuxの互換性のためにFreeBSDでのみ使用されます。

FreeBSDでは、procfsのデフォルトの置き換えは次のとおりです。プログラム統計-fこれをパラメータと一緒に使用してファイル記述子を取得できます。

procstat -a -f

アクティブファイルを識別するもう1つの基本的なツールは次のとおりです。統計資料-m必要に応じてメモリマッピングファイルを忘れないでください。

fstat -m

ファイルシステム操作を好む場合ファイルシステムの開発この露出fdescfsあなたは訪問することができますFDリクエストされた方法で。

ls /dev/fd

例:

echo -n Hello > hello.txt
echo " World!" | cat hello.txt /dev/fd/0

Macにクロスシステムを移植するためのツールも必要に応じてこのツールを使用できます。ラソフ(LiSt Open Files)として利用可能パック

移植性に興味があるなら読んでくださいファイル記述子リンクの移植性。それはすべての基盤をカバーしています。

関連情報