標籤:linux 核心 kernel
CREAT PROCESS
fork()|clone(參數,決定父子函數的共用內容)|do_fork()|copy_process()|dup_task_struct()建立子進程的核心堆棧,複製父進程的進程描述符(task_struct)進程描述符的很多成員被清除或者設為初值設定子進程的狀態task_struct-->state設定子進程的許可權task_struct-->flags設定子進程的進程號task_struct-->PID根據clone的參數,拷貝或共用: 開啟的檔案(task_struct-->fd),
檔案系統資訊(task_struct),訊號處理函數(task_struct-->struct signal_struct *signal;)進程的地址空間(task_struct-->struct mm_struct *mm, *active_mm;)
讓父子進程平分剩餘的時間片。|子進程被喚醒,調用exec()並執行!NOTE進程幾點要注意的:1,進程可以執行一個或者多個程式,一個程式可以被多個進程執行。2,受到共用資源的約束,進程會產生約束關係,造成進程會處於不同的狀態,比如等待沒有一個資源如IO請求,或造成阻塞,直到資源被滿足才會釋放該進程,進入執行狀態。對於時間片用完的進程會進入就緒狀態。
3,臨界資源一次只允許一個進程使用。EXIT PROCESSexit()
|do_exit()|對task_struct的state(設為PF_EXITING)、mm(調用__exit__mm())、segment(調用sem_exit),file(__exit_files),fs(__exit_fs),signal(exit_sighand),exit_code,notify等資源進行釋放。然後調用schedule()調用其他的進程,此時進程處於殭屍狀態,進程描述符存在於鏈表中,直到父進程調用wait4(),才完全釋放進程,刪除鏈表中的進程描述符task_struct和共用的資源。
linux process management