UNIXを勉強すると、forkとexecが分離されていることに疑問を持ち、パイプやリダイレクトを使ってシェルを作り、その合理性に感動するというのが、お決まりのパターンになっているが、なぜこんな実装が生まれてきたのだろう。 WindowsのネイティブAPIであるNtCreateProcessや、その祖先とも言える*1VMSのsys$creprcは、意味的にはforkとexecが一体化されている。まぁ、こっちの方がプロセス生成という意味では自然なアプローチに感じられるが、sys$creprcの山のような引数を見ると、これを使ってプログラムを書く気は萎えてくる。input、output、errorって標準入出力のバインディングを変えるためだろうか。そうだとすると、UNIXモデルの方がシンプルで理に適っている。 fork、execはUNIX V1のころから存在するのだが、「The Evolutio
![fork/execモデルの起源 - Plan9日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/469cabd309a006375aa1656e2bffb5367108d78f/height=288;version=1;width=512/https%3A%2F%2Fimages-fe.ssl-images-amazon.com%2Fimages%2FI%2F414Po7lDbIL._SL160_.jpg)