直接上代碼體驗fork桌面建立新的子程序
//fork.c
因為屬于linux的代碼,隻需要在ubuntu上運作既可以:
gcc fork.c -o fork
然後執行:./fork
輸出如下:
可以看出調用fork以前隻有一個程序 pid = 5319
但是在fork執行後:多了一個程序号 5320
就會有2個程序的列印,即代碼中的if和else都執行了,因為fork執行後就有兩個程序分别執行了。
其中fork的傳回值如果為:0說明目前就是子程序執行,為子程序的pid就說明是原來的父程序
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java中main方法裡面的如下代碼
核心就是forkSystemServer方法
分析發現主要調用:
這個從名字看相對也貼近剛開始學的fork了。繼續看Zygote.forkSystemServer
這裡調用的又是nativeForkSystemServer,nativeForkSystemServer屬于jni調用:
代碼路徑:
frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
調用到了ForkAndSpecializeCommon方法:
ForkAndSpecializeCommon方法本身非常長,但是看到這裡有一個 pid_t pid = fork();
大家心裡有沒有非常非常激動啊
這裡就是真正建立子程序的地方,和剛開始一樣講解實戰的fork程式是不是一樣啊
好了,那到這裡相信大家已經清楚了zygote怎麼一步步的建立出新的程序