林學個操作系統,並不能真正掌握這一段代碼:C工藝和分流處理
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int pid;
int i;
pid = fork();
switch(pid)
{
case -1:
perror ("Error \n");
break;
case 0:
for(i=1; i < 11; i++)
printf ("Im the son %d, My father is %d - Loop %d \n", getpid(), getppid(), i);
break;
default:
for(i=1; i < 11; i++)
printf ("Im the father %d and my father is %d - Loop %d \n", getpid(), getppid(), i);
wait(NULL);
printf("End of the father process %d - My son process %d have finished.\n", getpid(), pid);
break;
}
}
我明白,你叉(創建過程的副本),如果一切正常(不同從-1)然後它循環在for
十次,然後休息,我不明白的是兒子如何可以回到for
,我的意思是如果它是0(兒子)你printf「這是兒子X和我的父親是Y「然後休息。它是如何循環兩次10次?
子進程執行「情況下0:」子句和原始(父)進程執行「默認:」子句。它們都同時運行(儘管代碼執行的順序是未定義的)。 – Mick
謝謝米克,現在它是未定義的,但是什麼給了?我的意思是他們在某個時候結束了(也許混合)。執行系統的任何部分是否優先於其他進程? – user3442470
我其實誤解了你的問題。萊利說得對。 – Mick