进程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)

实时系统

软硬实时