1
說我有一個片的代碼叉()過程行爲
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t p ;
p = fork(); // p is a new process
// three cases -1, 0 , >0
// -1 will report the error
// 0 will tell us that the process is created
int i =0 ;
switch(p)
{
case -1 : printf("Error; \n");
break;
case 0: printf("I am child and my pid is %d",getpid());
printf("\nMy parent pid is : %d\n",getppid());
break;
default:printf("You are inside parent whose pid is %d\n",getpid());
for (int i =20 ; i <= 29; i++)
{
printf("%d\n",i);
}
break;
}
}
該代碼在不同的操作系統給不同的輸出。我的系統上有Ubuntu 14.04,我們大學實驗室的操作系統是Red Hat,當我們在不同的機器上執行相同的程序時,輸出是不同的。 輸出類似(在我的系統):
You are inside parent whose pid is 5283
20
21
22
23
24
25
26
27
28
29
I am child and my pid is 5284
My parent pid is : 5283
,哪一個是實驗室內的系統給輸出像
I am child and my pid is 5284
My parent pid is : 5283
You are inside parent whose pid is 5283
20
21
22
23
24
25
26
27
28
29
如果我們檢查程序認真,在我的系統的輸出父母首先完成任務,然後將控制權交給子進程,而在另一個系統上父進程首先創建子進程,子進程首先完成其任務,然後恢復到父進程。那有什麼區別?它是否依賴於系統架構或任何其他參數,如操作系統。請讓我們知道
[可以確定fork()的執行順序嗎?](http://stackoverflow.com/questions/6696959/can-the-order-of-execution-of-fork-be-determined ) – GSerg
總之,沒有什麼可以說他們的執行的相對順序。 它取決於調度程序依賴的調度算法。一般情況下,許多算法給予子進程更高的優先級,因爲在大多數情況下,子進程被創建爲運行不同的程序,因此如果父進程先運行,則不會爲父進程複製頁面... –