Linuxでは、実行中のプロセスの/proc/<pid>/fd/[0,1,2]
にアクセスするためにstd[in,out,err]
をよく使用します。
FreeBSDやmacOSで同じ結果を達成する方法はありますか?
これに対するdtraceベースの回答については、 このStackOverflowリンク を参照してください。 FreeBSDでテストしましたが、完全に機能します。
capture() {
Sudo dtrace -p "$1" -qn '
syscall::write*:entry
/pid == $target && arg0 == 1/ {
printf("%s", copyinstr(arg1, arg2));
}
'
}
procfs はFreeBSDでも利用できますが、manページからはfd
が実装されていないようです。 Procfsは通常、Linux互換性のためにFreeBSDでのみ使用されます。
FreeBSDでのprocfsのネイティブ置換は procstat であり、これを-f
パラメーターとともに使用してファイル記述子を取得できます。
procstat -a -f
アクティブなファイルを識別する別のネイティブツールは fstat です。必要に応じて、メモリマップトファイルの-m
を覚えておいてください。
fstat -m
ファイルシステムを操作したい場合は、 devfs があります。これは fdescfs を公開し、要求した方法で fd にアクセスできます。
ls /dev/fd
例:
echo -n Hello > hello.txt
echo " World!" | cat hello.txt /dev/fd/0
システム間でMacにも移植可能なものが必要な場合は、ツール lsof (LiSt Open Files)を使用できます。これは package として利用できます。
移植性が懸念される場合は、 ファイル記述子リンクの移植性 を読む必要があります。それはすべての拠点をカバーしています。