ふつうの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)にするととんでもないことが・・・。
続く・・・