在 Unix 中,某些进程会从系统启动到关机的时间里一直运行,但大多数进程都会随任务的开始和完成而迅速地出现和消失。有时,某个进程可能会“早夭“,甚至会“暴死(比如在系统崩溃时)。新的进程是从哪里来的呢?
每个新的 UNIX 进程都是某个现有进程的产物。另外,每个新进程(不妨将其称为“子进程)是对“父进程的克隆体(至少有一瞬间是如此),直到“子进程继续独立执行为止。(如果每个进程都是某个现有进程的后代,那么不免会有一个疑问:“第一个进程是从哪里来的?请参阅下面的侧栏以寻找答案。)
鸡和蛋
某些争论是经久不息的:生存还是毁灭?可口可乐还是百事可乐?PC 还是 Mac?当然,还有一个古老的悖论,“鸡生蛋,还是蛋生鸡?
如果每个新的 UNIX 进程都是某个现有的、正在运行的进程的后代,那么第一个进程是从哪里来的?答案是:UNIX 内核在系统启动序列中产生了第一个进程。
第一个进程被恰如其分地称为 init,所有其他系统进程的亲缘关系最终都可以追溯到 init。实际上,init 的进程编号是 1。如果您要查看 init 的状态,可键入 ps -l 1:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
正如您所看到的,init 的所有者 (UID) 是 0 (root)。和系统中所有其他进程不同的是,init 没有父进程,它的父进程 ID (PPID) 为 0。
4 S 0 1 0 0 68 0 - 373 select ? 0:02 init [2]
图 1-4 详细说明了进程的产生过程:
在图 2 和图 3 中,进程 A (Process A),正在运行一个由蓝色方框表示的程序。它运行编号为 10,11,12…的指令。进程 A 有属于自己的数据、程序的副本、打开的文件集,以及自己的环境变量集,当进程 A 刚出现时,会对它们进行初次捕捉。
标签: