日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux中的fork函数详解

發布時間:2025/6/15 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中的fork函数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在fork函數執行完畢后,如果創建新進程成功,則出現兩個進程,一個是子進程,一個是父進程。在子進程中,fork函數返回0,在父進程中,fork返回新創建子進程的進程ID。我們可以通過fork返回的值來判斷當前進程是子進程還是父進程。fork調用的一個奇妙之處就是它僅僅被調用一次,卻能夠返回兩次,它可能有三種不同的返回值:
? ? 1)在父進程中,fork返回新創建子進程的進程ID;
? ? 2)在子進程中,fork返回0;
? ? 3)如果出現錯誤,fork返回一個負值;

#include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函數返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的兒子/n");//對某些人來說中文看著更直白。 count++; } else { printf("i am the parent process, my process id is %d/n",getpid()); printf("我是孩子他爹/n"); count++; } printf("統計結果是: %d/n",count); return 0; }

運行結果是:
? ? i am the child process, my process id is 5574
? ? 我是爹的兒子
? ? 統計結果是: 1
? ? i am the parent process, my process id is 5573
? ? 我是孩子他爹
? ? 統計結果是: 1?

/***************************************************************************************************************************************/?

一個FORK的面試題
例子1:

#include <stdio.h> #include <sys/types.h> #include <unistd.h>int main(void) {int i;for(i=0; i<2; i++){fork();printf("%d.-\n",i);}wait(NULL);wait(NULL);return 0; }


答案:8

解析1:
fork()系統調用的特性,
fork()系統調用是Unix下以自身進程創建子進程的系統調用,一次調用,兩次返回,如果返回是0,則是子進程,如果返回值>0,則是父進程(返回值是子進程的pid),這是眾為周知的。
還有一個很重要的東西是,在fork()的調用處,整個父進程空間會原模原樣地復制到子進程中,包括指令,變量值,程序調用棧,環境變量,緩沖區,等等。

?

?

解析2:

總結

以上是生活随笔為你收集整理的linux中的fork函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。