GNU/Linux >> Linux の 問題 >  >> Linux

プロセスがパイプを介して別のプロセスに「接続」されているかどうかを確認しますか?

これを行う場合:

x | y

xの実行中に、yに接続されているかどうかを確認する方法はありますか? yが何であるかわからないことに注意してください。また、yを開始する責任はありません。

具体的には、Node.jsランタイムについて話しているので、おそらくこれはNode.js固有の質問です。しかし、最終的には、任意のランタイムを決定できるかどうか疑問に思っています。それは可能で、どのようにですか?

stdout / stderrが別のプロセスのstdinに接続されているかどうかを判断することは可能ですか?それがこの質問の内容だと思います。

承認された回答:

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

$ </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を作成します syscallしてから、.st_modeをテストします 返されたstruct statのフィールド S_ISFIFOを使用する マクロ。

CPUサイクルを浪費し、外部バイナリを使用したい場合は、test -p /dev/fd/$THE_FDを実行できます。 答えを得る(またはtestのシェルでそれを呼び出す) 組み込みになるか、statを実行します 、またはファイルタイプを判別できる他の何かを起動します。


Linux
  1. Linuxでのプロセス間通信:パイプとメッセージキューの使用

  2. Linux でディスクに書き込みを行っているプロセスを特定する方法

  3. プログラムで別のプロセスの親 pid を取得しますか?

  1. コマンドライン経由でLinuxのプロセス数を見つける

  2. ssh 経由で永続的なプロセスを実行する

  3. Linux でファイルを開いているプロセスを特定するにはどうすればよいですか?

  1. javaを使用している実行中のプロセスを特定するにはどうすればよいですか?

  2. 実行中のプロセスが属するグループを特定する

  3. ファイルが書き込み中かどうかを判断しますか?