プロセスがパイプを介して他のプロセスに「接続」されていることを確認する

プロセスがパイプを介して他のプロセスに「接続」されていることを確認する

私がこうすれば:

x | y

xが実行中にyに接続されていることを確認する方法はありますか?私はyが何であるかわからず、yを始める責任はありません。

特にNode.jsランタイムについて話しているので、これはNode.js関連の問題かもしれません。しかし、最終的に与えられた実行時間を決定できるかどうかを知りたいです。可能ですか?達成する方法?

stdout / stderrが他のプロセスのstdinに接続されていることを確認することは可能ですか?それがこの質問の目的だと思います。

ベストアンサー1

プログラムの出力がパイプに入るかどうかを確認します。https://nodejs.org/api/fs.html#fs_class_fs_stats、返されたオブジェクトを呼び出してfs.fstat(FileDescriptor)から呼び出しようとしています(FIFO ==先入れ先出し==パイプまたは名前付きパイプ)。isFIFO()stat

$ </dev/null node -e 'var fs=require("fs");
   fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); });  ' 
  false
$  : | node -e 'var fs=require("fs");
   fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); });  ' 
  true

Cはシステムコールを実行し、fstatマクロを使用して返された.st_modeフィールドをテストします。struct statS_ISFIFO

CPUサイクルを無駄にしたい場合や外部バイナリを使用したい場合は、答えを取得することができます(または組み込み関数になるtest -p /dev/fd/$THE_FDシェルで答えを呼び出すか、実行するか、結果を決定する他のものを起動できます)。ファイル形式)。teststat

おすすめ記事