fork


目次に戻る


昨日はウィンドウズよりだったので今日はUNIXよりに。
 
UINIX上のプログラムをそこそこやった事があるのならforkを使った事はあると思いま す。
forkは新しいプロセス(プログラムと似意?)を起動する関数で、たいてい次のように 使う。
int pid;
if( (pid=fork()) < 0 ){
    /* fork 失敗よ〜 */
    return -1;
} else if( pid == 0 ){
    /* 新しく起動した子プロセスに処理させたい内容 */

    /* なんか処理 */

    exit( 0 );    /* 子プロセス終了 */
}

/* 親プロセスの処理 */

forkを使った事が無い人が見ると「なんじゃこりゃ!」と言いたくなると思う。私も初めてみ たときわけがわからなかった。
 
forkは呼び出されると今実行しているプロセスの複製を作成します。その複製は、メ モリの内容も一緒(アドレスは違うよ)、レジスタの内容も一緒(絶対アドレスを指すやつは 違うよ)になります。そして、親プロセスに大しては失敗ならば負の数を。プロセス起動が 成功したのならば起動した子プロセスのプロセスIDを返します。子プロセス側ではforkは 0を返します。
 
forkは便利な関数で、かなり重宝します。
どんな風に便利なのかは明日(exec)と明後日(pipe)紹介する関数と一緒に説明し ます。
 

目次に戻る