a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

簡單掌握Linux系統(tǒng)中fork()函數(shù)創(chuàng)建子進(jìn)程的用法

2020-01-26 14:33:46
字體:
供稿:網(wǎng)友

fork()函數(shù)用于從已存在的進(jìn)程中創(chuàng)建一個(gè)新進(jìn)程。新進(jìn)程稱為子進(jìn)程,而園進(jìn)程稱為父進(jìn)程。使用fork()函數(shù)得到的子進(jìn)程是父進(jìn)程的一個(gè)復(fù)制品,它從父進(jìn)程處繼承了整個(gè)進(jìn)程的地址空間,包括進(jìn)程的上下文、代碼段、進(jìn)程堆棧、內(nèi)存信息、打開的文件描述符、符號(hào)控制設(shè)定、進(jìn)程優(yōu)先級(jí)、進(jìn)程組號(hào)、當(dāng)前工作目錄、根目錄、資源限制和控制終端等,而子進(jìn)程所獨(dú)有的只有它的進(jìn)程號(hào)、資源使用和計(jì)時(shí)器等。

因?yàn)樽舆M(jìn)程幾乎是父進(jìn)程的完全復(fù)制,所以父子兩進(jìn)程會(huì)運(yùn)行同一個(gè)程序。這就需要用一種方式來區(qū)分它們,并使它們照此運(yùn)行,否則,這兩個(gè)進(jìn)程不可能做不同的事。實(shí)際上是在父進(jìn)程中執(zhí)行fork()函數(shù)時(shí),父進(jìn)程會(huì)復(fù)制一個(gè)子進(jìn)程,而且父子進(jìn)程的代碼從fork()函數(shù)的返回開始分別在兩個(gè)地址空間中同時(shí)運(yùn)行,從而使兩個(gè)進(jìn)程分別獲得所屬fork()函數(shù)的返回值,其中在父進(jìn)程中的返回值是子進(jìn)程的進(jìn)程號(hào),而在子進(jìn)程中返回0。因此,可以通過返回值來判斷該進(jìn)程的父進(jìn)程還是子進(jìn)程。

同時(shí)可以看出,使用fork()函數(shù)的代價(jià)是很大的,它復(fù)制了父進(jìn)程中的代碼段、數(shù)據(jù)段和堆棧段里的大部分內(nèi)容,使得fork()函數(shù)的系統(tǒng)開銷比較大,而且執(zhí)行速度也不是很快。

代碼示例:

#include <stdio.h>#include <unistd.h>int main(int argc, const char * argv[]) {  // insert code here...  pid_t pid;  if((pid = fork()) == 0){    //返回0的是子進(jìn)程    printf("child pid: %d/n", getpid());  } else {    printf("pid: %d/n", pid);//父進(jìn)程中返回子進(jìn)程的pid    printf("father pid: %d/n", getpid());  }}

打印的結(jié)果如下:

pid: 552father pid: 549child pid: 552

以下是一些注意點(diǎn)及總結(jié):
1) 之前在VS上想要用,結(jié)果發(fā)現(xiàn)根本沒有這個(gè)頭文件;因?yàn)?lt;unistd.h>是類unix系統(tǒng)才有的;上面的代碼在mac os上測試OK。

2) fork()是用來創(chuàng)建子進(jìn)程的,創(chuàng)建之后子進(jìn)程是父進(jìn)程的副本,子進(jìn)程獲得父進(jìn)程的數(shù)據(jù)空間、堆和棧的副本,注意兩者并不是共享的。父子兩者僅共享代碼段。這個(gè)是以前的實(shí)現(xiàn),現(xiàn)在的話一般不會(huì)直接去復(fù)制,而是寫時(shí)復(fù)制(copy-on-write)。

3) fork()之后父子進(jìn)程的執(zhí)行順序是不確定的。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 免费a在线看 | 国产精品一区二区三 | 欧美日韩一区二区三区在线观看 | 精品国产不卡一区二区三区 | 成人av播放| 日日躁夜夜躁狠狠躁aⅴ蜜 成人免费在线观看 | 欧美2区 | 国产视频三区 | 夜夜躁狠狠躁夜躁麻豆 | 一二三区不卡视频 | 国产精品影院在线观看 | 国产日韩一区二区三区 | 成人在线观看免费视频 | 国产一区二区三区在线 | 久久一 | 欧美激情在线播放 | 超碰在线一区二区三区 | 在线婷婷 | 免费看h| 成年人在线观看视频 | 成人欧美一区二区三区在线观看 | 成人一级视频 | 亚洲精品白浆高清久久久久久 | 综合一区 | 国产精品免费一区二区三区四区 | 欧美高清dvd | 亚洲视频在线看 | 欧洲成人午夜免费大片 | 一区综合 | 亚洲情综合五月天 | 久久久久久久久久久国产精品 | 成人免费视频 | 久久久久久亚洲av毛片大全 | 国产亚洲精品精品国产亚洲综合 | 精品视频久久 | 久久精品免费一区二区 | 黄色地址 | 国产依人在线 | 久久国产精品偷 | 97超碰在线播放 | 亚洲第一国产精品 |