fork()函式的基本用法

WUST_陳迪洋發表於2016-10-25

在Linux 中,建立一個新程式的唯一方法是有某個已存在的程式呼叫fork()函式,被建立的新程式稱為子程式,已存在的程式稱為父程式.
1.fork()函式
fork()函式的實質是一個系統呼叫(和write函式類似),其作用是建立一個新的程式,當一個程式呼叫它,完成後就出現兩個幾乎一模一樣的程式,其中由fork()建立的新程式被稱為子程式,而原來的程式稱為父程式.子程式是父程式的一個拷貝,即子程式從父程式得到了資料段和堆疊的拷貝,這些需要分配新的記憶體;而對於只讀的程式碼段,通常使用共享記憶體方式進行訪問.
fork()的標頭檔案 ”
#include

/*這是一個呼叫fork()函式建立子程式的例項,當建立成功之後會分別列印兩者對應的程式標誌符*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
  pid_t pid;        //程式識別符號
  pid = fork();     //建立一個新的程式
  if(pid<0)
    {
    printf("建立程式失敗!");
    exit(1);
    }
  else if(pid==0)   //如果pid為0則表示當前執行的是子程式
    printf("這是子程式,程式識別符號是%d\n",getpid());
  else          //否則為父程式
    printf("這是父程式,程式識別符號是%d\n",getpid());
  return 0;
}

我自己的執行結果:
這是父程式,程式識別符號是3014
這是子程式,程式識別符號是3015

例項二:

/*這是一個呼叫fork()函式建立一個子程式,然後分別列印輸出子程式和父程式中的變數的例項*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int glob = 6;
int main(int argc,char *argv[])
{
    int var;    //內部變數
    pid_t pid;      //檔案識別符號
    var = 88;   //內部變數賦值
    printf("建立新程式之前.\n");   //還沒有建立子程式
    if((pid=fork())<0)
    {
      perror("建立子程式失敗!\n");
    }
    else if(pid==0)
    {
      glob++;
      var++;
    }
    else
    {
      sleep(2); //父程式阻塞兩秒
    }
    printf("程式識別符號為=%d,glob=%d,var=%d\n",getpid(),glob,var);//分別在子程式中輸出兩個變數的值
    exit(0);
}

執行結果:
建立新程式之前.
程式識別符號為=3070,glob=7,var=89 //等待2秒
程式識別符號為=3069,glob=6,var=88

相關文章