Unix核分裂の実験
新山さんのメモより。
UNIX 核分裂の実験。以下のコマンド (grep a foo >> foo) を繰り返し入力すると、最初はすぐ終わってしまうのですが、ある時点から無限にファイルが伸びるようになります。(Linux でも FreeBSD でも)
あー。これおもしろいなあ。
ファイルサイズがバッファサイズを越えると、ってことかな。そう思うと核分裂というより交通渋滞なような。
おや
上のような予測をして、バッファサイズの限界を調べてみようとしたのだが、予想と違う結果がでた。そんな単純な話じゃないのか。
"a"だけを2048行並べた4096バイトのファイルfooにgrep a foo >> fooを実行すると処理は無事に止まって、fooは二倍のサイズ(4096行8192バイト)になる。じゃ1バイトだけ増やそう、と思って最終行だけ"aa"にした2048行4097バイトのfooに同じことをすると、、
$ wc foo 2048 2048 4097 foo $ grep a foo >> foo $ wc foo 6144 6144 12291 foo
処理は止まるが何故かサイズが三倍に…。なんで三倍?
$ grep aa foo aa aa aa
ってなるから、ちょうど二回分追加されてるってことだよなあ。うーん。