fork()函式的基本用法
在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
相關文章
- string 函式的基本用法函式
- 分割槽函式Partition By的基本用法函式
- fork函式與vfork函式函式
- ROW_NUMBER() OVER函式的基本用法函式
- fork()與vfork()函式函式
- fork與vfork函式函式
- getopt_long函式基本用法-linux函式Linux
- 理解 pcntl_fork 函式函式
- 研究linux函式 之 fork()Linux函式
- MySQL8.0-分組函式ROLLUP的基本用法(GROUPING)MySql函式
- ascii函式和substr函式的用法ASCII函式
- GetModuleFileName函式的用法函式
- createStyleSheet()函式的用法函式
- qsort函式的用法函式
- COALESCE函式的用法。函式
- Linux fork程式的用法Linux
- Linux 中的 fork() 函式例項解析Linux函式
- 作業系統---之fork()函式作業系統函式
- linux中fork()函式詳解Linux函式
- 例項詳解 Linux 中的 fork() 函式Linux函式
- APUE 8-1 fork函式例項函式
- Instr函式的用法函式
- 【Oracle的NVL函式用法】Oracle函式
- Oracle dump函式的用法Oracle函式
- openat()函式的用法示例函式
- Oracle trunc()函式的用法Oracle函式
- Oracle 函式 Translate 的用法Oracle函式
- oracle的with函式用法示例Oracle函式
- Translate函式用法函式
- abs函式用法函式
- 執行緒中呼叫fork函式,鎖的變化執行緒函式
- fork函式中的記憶體複製和共享函式記憶體
- EXCEL 基本函式Excel函式
- python中fork()函式生成子程式分析Python函式
- C語言中函式printf()和函式scanf()的用法C語言函式
- C++ 函式 realloc 的用法C++函式
- PostgreSQL>視窗函式的用法SQL函式
- Excel函式的初級用法Excel函式