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 → 出力先」という流れが完成
…長文申し訳ないですが、以上、ご参考まで。
”
—