僕がこの業界で仕事をするようになってから、 C言語に触れる機会はすごく少なく、実際に 大学の授業以来、コーディングすらした事がない。

大学でもまともに勉強していないので、C言語は出来ないといっていい。

やっぱりC言語知らないと損をする。
自分の関心が変わってきているせいなのか 世の中の面白そうな事についていけない事が多い。

という事は人生の中での楽しい(楽しいだろう)事を みすみす逃している事になるではないか!!

という事で少しずつですが、C言語も勉強していきます。

という事で、まずはfork()関数

なぜfork()かというと、Rubyのserver.rbを見たら fork という関数があり、
それはどうやら forkというシステムコールを使っているらしい。
プロセスを作るんだよねぇ。という事はなんとなく分かってたんだけど、
もっと詳しく調べてみる。
ウィキペディアによると
fork(フォーク)は、UNIX系システムコールのひとつで、プロセスのコピーを生成するものである。新たに作り出されたプロセスを子プロセス、fork()を呼び出したプロセスを親プロセスと呼ぶ。また、マルチスレッド環境でスレッドのコピーを作ることもforkと呼ぶことがある。
ということらしい。 さらにサンプルコードがあり、
   pid_t pid;

   pid = fork();

   if (pid == 0) {
      /* 子プロセス:
       * fork()が0を返す場合、子プロセスである
       * 1秒に1ずつ、10まで数える。
       */
      int j;
      for (j=0; j < 10; j++) {
         printf("child: %d\n", j);
         sleep(1);
      }
      _exit(0); /* exit() を使わない点に注意 */
   } else if(pid > 0) { 
      /* 親プロセス:
       * 0以外の場合、親プロセスである
       * ここでも10まで数える
       */
      int i;
      for (i=0; i < 10; i++) {
         printf("parent: %d\n", i);
         sleep(1);
      }
   } else {   
      /* エラー処理 */
      fprintf(stderr, "couldn't fork");
      exit(1);
   }
とある。
forkを呼びだした結果が、 子プロセスだったり、 親プロセスだったりするというのが意味不明だったけど、
以下のページ等を参考にしたら、すこし理解できた。
[ネットワークサービスは必ずforkしよう]
つまり、3行目の
pid = fork();
を呼び出した時点で、プロセスが複製されさらに、そのまま実行される。
で、親プロセス側では1以上の値が受け取れて、子プロセス側では0が受け取れる。
で、複数のプロセスが並列で実行されている。
という理解でスッキリしました。

自分がどう理解していて、なぜ意味不明だったのかを理解してもらうのは
文章では伝えにくいのだけれど、少し成長しました。