ふつうのLinuxプログラミング 第11章-第12章1 メモリとプロセス

11章はメモリ、ハードウェア、コンパイルの説明。いつまで経っても、ポインタは苦手(汗

驚いたのが、コレ。/proc/pid番号/mapsで、メモリの使用状況が判る。

% ps
  PID TTY          TIME CMD
 6224 pts/5    00:00:00 ps
31822 pts/5    00:00:16 zsh
% cat /proc/31822/maps
00110000-00116000 r-xp 00000000 fd:00 1968868    /usr/local/lib/zsh/4.3.2/zsh/parameter.so
00116000-00117000 rwxp 00005000 fd:00 1968868    /usr/local/lib/zsh/4.3.2/zsh/parameter.so
...略

詳しくはよくわからないけど、Linuxって全部ファイルなんだなぁ・・・と。

で、もっと驚いたのが、12章。forkを使ったプログラム。

自分自身をコピー(fork)して書き換える(exec)って書いてあったけど、プログラムを組むまではイマイチ掴めなかった。

pid = fork();             // 自分自身をコピーする
if (pid == 0) {           // 子プロセス
    execl(path,args...);  // 書き換える
    exit(EXIT_FAILURE);   // 子プロセスの異常終了
} else { // 自分自身
    int status;
    waitpd(pid,status,0); // 子プロセスの終了を待つ
    exit(EXIT_SUCCESS);   // 正常終了
}

実際作ってみると、2つのプロセスが動いているのが確認できる。なぜ、自分自身をコピーするのかよくわからないけど、不思議な仕組みであることだけ掴めた。後々判るのかどうか楽しみです。

ちょっと調べてみた。

  • Fork - Wikipedia わかりやすい。コピペしてsleepやiの値を変えると面白い。メモリは別。子の方のsleep(2)にするととんでもないことが・・・。

続く・・・