關於fork函式生成父子程序變數虛擬位址

2021-08-15 11:49:24 字數 1247 閱讀 4077

#include

#include

int main(void)

else //返回乙個大於0的值給父程序,就是子程序的編號

return 0;

}[root@localhost labs]# ./lab17 

process id = 11498,old count = 5,address count = 0x53c13a28

i am the parent process,my process id is 11498,pid is 11499

i am the child process,my process id is 11499,pid is 0

parent process id = 11498,old count = 6,address count = 0x53c13a28

[root@localhost labs]# 

[root@localhost labs]# 

[root@localhost labs]# child process id = 11499,old count = 7,address count = 0x53c13a28

//變數位址相同為虛擬位址,實際的實體地址不同

在語句fpid=fork()之前,只有乙個程序在執行這段**,但在這條語句之後,就變成兩個程序在執行了,這兩個程序的幾乎完全相同,將要執行的下一條語句都是if(fpid<0)……

為什麼兩個程序的fpid不同呢,這與fork函式的特性有關。fork

呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:

1)在父程序中,fork返回新建立子程序的程序id;

2)在子程序中,fork返回0;

3)如果出現錯誤,fork返回乙個負值;

在fork函式執行完畢後,如果建立新程序成功,則出現兩個程序,乙個是子程序,乙個是父程序。在子程序中,fork函式返回0,在父程序中,fork返回新建立子程序的程序id。我們可以通過fork返回的值來判斷當前程序是子程序還是父程序。

引用一位網友的話來解釋

fpid

的值為什麼在父子程序中不同。

「其實就相當於鍊錶,程序形成了鍊錶,父程序的

fpid(p

意味point)

指向子程序的程序

id,因為子程序沒有子程序,所以其

fpid為0.

5 8fork父子程序

理解fork建立子程序的本質 1 開啟乙個有內容的檔案 2 呼叫fork建立子程序 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序分別讀到的字元是什麼 2 按如下要求編寫程式 1 呼叫fork建立子程序 2 開啟乙個有內容的檔案 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序...

Linux 父子程序與fork

每個程序都有乙個非負整數表示的唯一程序id,如交換程序 即排程程序 id為0,init程序id為1,頁守護程序id為2 原型如下 fork函式被呼叫一次,但返回兩次,兩次返回的區別就是子程序返回的是0,父程序返回的新子程序的id 子程序是父程序的副本,獲得了父程序資料空間 堆和棧的副本 父子程序並不...

fork父子程序執行順序

使用一段 來檢查父子程序執行順序 str hello world php eol 派生乙個子程序,子程序會複製主程序中的上下文 pcntl fork 函式在主程序中返回子程序的程序id,在子程序返回0,失敗在主程序返回 1 pid pcntl fork 這裡開始的 會被主程序 子程序共同執行 如果不...