memo

2016-01-14

named pipe と xargs で、簡易 task queue を作れるのではないか

xargs は通常は別コマンドの出力をパイプでつないで使うけど、 これを named pipe をつなぐようにすれば、外部から任意のタイミングで入力を送り込めるようになるので、 簡易的な task queue として使えるのでは?と思い付いたので試してみる。

$ mkfifo -m 0600 queue
$ tail --follow=name queue | xargs -L1 echo

(単純に < queue とリダイレクトしてつなぐと、最初の入力を処理したところで停止してしまったので、 tail で読み出すようにしている。 --follow=name としているのは、ファイルを消すことで処理を止められるように。)

で、この状態で別端末から echo hello > queue とかやれば、さっきの端末にその文字列が表示される。

あとは、 echo の部分をもう少し役に立つコマンドにしてやりつつ、 -P オプションの同時実行数設定とかを使っていけば、役立つ場面もありそうかなぁ。