Linux 三個(gè)特殊進(jìn)程:
PID 0 idle進(jìn)程
?特點(diǎn):1务蝠、系統(tǒng)自建的首個(gè)進(jìn)程
????????????2惊完、創(chuàng)建運(yùn)行內(nèi)核空間
????????????3猜绣、系統(tǒng)所在進(jìn)程
PID 1 init進(jìn)程
?特點(diǎn):1课舍、通過idle的kernel_thread創(chuàng)建
????????????2螟深、初始化內(nèi)核空間后谐宙,加載init程序,形成用戶空間
????????????3界弧、除idle外凡蜻,其它進(jìn)程都由init創(chuàng)建并運(yùn)行
????????????4、啟動(dòng)其它系統(tǒng)進(jìn)程后垢箕,init將變?yōu)槭刈o(hù)進(jìn)程監(jiān)視它們
????????????5划栓、Android的第一個(gè)進(jìn)程
PID 2 kthreadd進(jìn)程
Android 關(guān)鍵進(jìn)程:
zygote進(jìn)程
?特點(diǎn):1、由init創(chuàng)建
????????????2条获、Java世界開創(chuàng)者
????????????3忠荞、源碼涉及Native層
????????????4、進(jìn)程創(chuàng)建和啟動(dòng)的內(nèi)部是通過fork()實(shí)現(xiàn)
????????????5、創(chuàng)建流程:init進(jìn)程通過fork() ==》? 1.Zygote進(jìn)程通過startSystemService()? ==》? SystemService進(jìn)程 ==》 ActivityManagerService進(jìn)程
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.Zygote進(jìn)程完成其它進(jìn)程啟動(dòng)之后委煤,調(diào)用runSelectLoopMpde()休眠
Activity 創(chuàng)建過程:
AcivityManagerService通過SystemService進(jìn)程向發(fā)送消息喚醒Zygote進(jìn)程 ==》? Zygote進(jìn)程創(chuàng)建子進(jìn)程? ? ==》 子進(jìn)程調(diào)用android.app.ActivityThread的main()函數(shù)完成創(chuàng)建