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