1つのfifoを複数のプロセスで監視します。
<?php $log_file = "/tmp/abc.txt"; $log_fp = fopen($log_file, "a"); $read_file = "./fifo_read"; posix_mkfifo($read_file, 0600); $read_fp = fopen($read_file, "r"); $pid = posix_getpid(); while (true) { $buf = stream_get_contents($read_fp); if (is_string($buf) && $buf != "") { foreach (preg_split("/\r\n|[\r\n]/", $buf, -1, PREG_SPLIT_NO_EMPTY) as $line) { fwrite($log_fp, $pid . ":" . date("Y-m-d H:i:s") . ":" . $line . "\n"); } } fopen($read_file, "r"); } ?>
確認します。
for i in $(seq 1 10); do (php test.php &); done echo -n "" > /tmp/abc.txt for xx in $(seq 1 100); do ((for i in $(seq 1 1000); do echo "cat /proc/meminfo" > fifo_read; done) &); done wc -l /tmp/abc.txt grep /proc/meminfo /tmp/abc.txt |wc -l cat /tmp/abc.txt |awk -F\: '{print $1}'|sort|uniq -c killall php
1つプロセスで複数の fifo を監視するには inotify, dio (pecl)などを使うらしいです。
open(file, O_RDONLY)でノンブロックではないので止まります。strace
ログの書き込みが遅れます。
openの動作で一時停止させるのは、良くないかもしれません。
0 件のコメント:
コメントを投稿