About

what kind of things interest me?

Looking for something specific?

 
syslog.conf(5)によれば、“|”で始まる記述は、名前つきパイプへの出力を指定するもので、Apacheで指定できるような、プロセス起動&パイプによるデータ受け渡し、とは異なるようです。
かと言って、“|”と他ホストへの転送以外の指定では、他のプロセスにデータを受け渡すような真似はできなさそうです。

で、名前つきパイプとは、mkfifo(1)や、fifo(4)が参考になりますが、通常使うパイプとは異なります。

 ・通常のパイプ ( 一例 )
  1. プロセスA pipe によりパイプ生成
  2. プロセスA fork により プロセスB 複製 ( この時点で A,B パイプ共有 )
  3. プロセスA 出力先をパイプに、プロセスB 入力元をパイプに指定
  4. 「プロセスA → パイプ → プロセスB」というデータの流れが完成

 ・名前つきパイプ
  1. mkfifo により、ファイルシステム上に名前つきパイプ生成
  2. プロセスB 入力元を、名前つきパイプに指定
  3. プロセスA 出力先を、名前つきパイプに指定
  4. 「プロセスA → 名前つきパイプ → プロセスB」というデータの流れが完成

似ているように見えますが…
通常のパイプは、親子・兄弟関係のあるプロセス内のプライベートなものですが、名前つきパイプの場合、どのプロセスが使用するか全く分からない…、すなわち、
通常のパイプは、関連するプロセスが一蓮托生のため、プロセス起動・停止が制御し易いが、名前つきパイプの場合、本質的に無関係なプロセス群を協調させるのが難しい
という性格があり、経験上一筋縄では行かないように思います。

こんな実験をしてみれば、少しは分かり易いでしょうか

 $ cat /etc/services | grep -v ‘^#’ > out1

 $ mkfifo tmpfifo
 $ grep -v ‘^#’ tmpfifo > out2 &
 $ cat /etc/services > tmpfifo

今回の例だと、次のようなイメージになりそうです。

 ・mkfifo により名前つきパイプ作成、syslog.conf でそれを指定
 ・「grep パターン 名前つきパイプ > 出力先」というようなコマンドを走らせておく
 ・syslog起動
 ・「syslog → 名前つきパイプ → grep → 出力先」という流れが完成

…長文申し訳ないですが、以上、ご参考まで。 
2011.08.30  8:33pm  

Post Notes

  1. malmrashede reblogged this from memeofhash
  2. memeofhash posted this
      
RSS
a Tumblr theme by Robert Boylan