我的理解是,這fork
是透過克隆父進程來創建新進程的系統呼叫。透過什麼創建父進程?如果使用 C 庫建立多個進程,創建第一個進程的系統呼叫是什麼?例如運行時./main.o
答案1
核心本身包含一個execve()
創建進程 1 (init) 的內部調用,該進程永遠不會退出。
Init()是整個行程樹的根。它首先為所有已知服務和其他配置的任務以及所有登入設備分叉進程。
答案2
當您從 shell 執行程式時,shell 就是其父進程。
shell 呼叫fork()
建立一個新的子進程,然後在該新進程中呼叫該族之一exec()
來開始執行您的程式。
如果您的程式由其他(非 shell)進程啟動,則順序是相同的。
顯然,這必須從某個地方開始:所有進程的最終祖先是進程init
(PID 0),它由核心神奇地啟動以啟動用戶空間。