差分

移動先: 案内検索

プロセス管理

43 バイト追加, 2013年11月10日 (日) 17:50
/* fork(2) */ codeのフォントを指定した。
プロセスの生成はfork(2)を使い親プロセスが子プロセスを生み出します。下のコードを見て下さい。
<CODE>
#include <unistd.h> 
#include <stdlib.h>
exit(EXIT_SUCCESS);
}
</CODE>
システムコールfork(2)はフォーク後、親プロセスでは子プロセスのプロセスIDを返却し、子プロセスでは0を返却します。
このプログラムを実行すると次のような出力になります。
<CODE>
$ ./a.out
pid in parent: 5008
pid in child: 0
wait returns : 5008(0)
</CODE>
;補足: プログラム中ではシステムコールexecve(2)よりもライブラリ関数execl(3)などを使う場合の方が多いでしょうが、ここでは説明としてexecve(2) を取り上げています。下のコードは/bin/dateを実行している例です。
<CODE>
1 #include <unistd.h>
2 main() {
5 wait();
6 }
</CODE>
;調べてみよう: カーネルの中でforkをするのはkernel/fork.cの中の関数do_fork です。関数do_forkは関数copy_processを呼び出してプロセスをコピーするのがメインの役割です。関数copy_processは、必要なものを親プロセスからコピーし子プロセス独自に必要な情報を初期化しています。
匿名利用者