進程ID
進程ID的分配
進程的層次結構
運行新進程
exec系列調用:加載指定的程序到內存
fork:寫了copy,不共享。
vfork:共享數據段,並且子進程先執行。子進程必須立即發出一個成功的exec調用或是調用_exit()以便結束執行。
終止進程
exit():先完成進程的用戶空間中所需進行的所有工作,接着調用_exit()系統調用
_exit():內核處理終止進程的其餘工作
......
等待已終止子進程
unix的原設計者決定,若子進程的死亡時間先於它的父進程,則內核應該讓子進程進入一個特殊的進程狀態(zombie). (包含有用數據的基本內核數據結構),父進程取得子進程信息,正式結束。
pid_t wait(int *status)
pid_t waitpid(pid_t 皮的, int* status, int options)
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options)
int system(const char *command)
殭屍進程
父進程先於子進程死亡,子進程會重新指派給init進程(pid爲1)。 init會週期性的等待它的所有的子進程,這樣確保殭屍進程不會停留太久的時間。
守護進程
必須是init的子進程,而其不的鏈接到一個終端。
int daemon(intnochdir,noclose)
高級進程管理
進程調度:搶佔多任務,多處處理器。。。。。。。
查看kernel/sched.c
時段
i0密集型與處理器密集型進程
線程
讓出處理器
進程主動讓出執行權
int sched_yield(void)
實時系統
軟硬實時