天天看點

linux程序程式設計(一)-- fork()函數簡單應用簡介函數原型執行個體

簡介

調用fork()函數會生成一份目前程序的副本。調用fork()的程序為父程序,副本程序為子程序。子程序共享父程序的代碼段,并擁有與父程序資料段,堆和棧的副本(與父程序内容相同但空間獨立)。

現在系統中應用了寫複制機制(Copy-On-Write),調用fork後子程序并沒有生成獨立的空間,仍然共享父程序資源,隻有當子程序嘗試修改資料段或堆棧時才會配置設定新的空間。這樣大大提高了fork的效率。

函數原型

#include <unistd.h>
pid_t fork(void);
           

描述

建立一個子程序,這個子程序為目前程序的副本。

傳回值

成功時在父程序中傳回子程序的pid,子程序中傳回0。

失敗時在父程序中傳回-1,無子程序。

執行個體

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    pid_t pid;
    int var = ;

    pid = fork();

    if(pid == ) {
        var++;
        printf("I'm child process, pid:[%d], var:%d\n", getpid(), var);
    } else if(pid > ) {
        sleep(); /* 保證父程序在子程序後退出,便于觀察var變量的獨立性. */
        printf("I'm parent process, pid:[%d], var:%d\n", getpid(), var);
    } else {
        printf("fork error\n");
    }

    return ;
}
           

運作結果:

$ ./a.out 
I'm child process, pid:[], var:
I'm parent process, pid:[], var:
           

繼續閱讀