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的基本用法函式
- 分割槽函式partition by的基本用法【轉載】函式
- fork()與vfork()函式函式
- 理解 pcntl_fork 函式函式
- 研究linux函式 之 fork()Linux函式
- MySQL8.0-分組函式ROLLUP的基本用法(GROUPING)MySql函式
- Linux fork程式的用法Linux
- GetModuleFileName函式的用法函式
- Instr函式的用法函式
- 作業系統---之fork()函式作業系統函式
- 【Oracle的NVL函式用法】Oracle函式
- abs函式用法函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- C語言中函式printf()和函式scanf()的用法C語言函式
- sys_context函式的用法Context函式
- python中zip()函式的用法Python函式
- PostgreSQL>視窗函式的用法SQL函式
- C++ 函式 realloc 的用法C++函式
- Excel函式的初級用法Excel函式
- Matlab中erf函式的用法Matlab函式
- pytorch tensor的基本函式PyTorch函式
- python函式的基本使用Python函式
- Python range() 函式用法Python函式
- SSD-函式用法函式
- SQL LEN()函式用法SQL函式
- Python排序函式用法Python排序函式
- EXCEL 基本函式Excel函式
- Python中的split()函式的用法Python函式
- 【多程式】Linux中fork()函式詳解|多程式Linux函式
- C語言中qsort函式的用法C語言函式
- C語言函式sscanf()的用法C語言函式
- php array_filter() 函式的用法PHPFilter函式
- C — 快排函式 qsort 的用法函式
- python sorted()函式的引數用法Python函式
- python函式符號sympy的用法Python函式符號
- C++中函式呼叫的用法C++函式
- Javascript函式的基本知識JavaScript函式
- PHP 自定義函式用法及常用函式集合PHP函式