open3 は、STDIN、STDOUT、および STDERR のみを受け取ります。実行中のコマンドが他のファイル記述子を使用している場合、open3 はそれらをキャプチャできません。
echo foo # Can be captured
echo foo >&2 # Can be catured
echo foo >&3 # Cannot be captured (with open3)
私はIPC::Run::runを調べましたが、これはそれに対処できるようですが、PIDも必要であり、IPC::Run::runがそれを提供する方法が見つかりませんでした。
openN または IPC::Run::run が PID を取得する方法はありますか?
バックグラウンド
これは、GNU Parallel の可能な拡張を意図しているため、次のことができます。
parallel 'echo {} start >&3;sleep 10;echo {} end >&3' ::: a b c 3>out.file
異なるジョブからの出力が混在することはありません。GNU Parallel は、各 pid を追跡する必要があります (特に--keep-order
を使用する場合)。