03-进程ID
5.2 进程ID
每个进程都由一个唯一的标识符表示的,即进程ID,简称pid。系统保证在任意时刻pid都是唯一的。也就是说,在t+0时刻有且只有一个进程的pid是770(如果有的话),但并不表示在t+1时刻另一个进程的pid就不能是 770。从本质上来讲,大多数程序会假定内核不会重用已用过的pid值——这个假设,正如你所将看到的,是完全正确的。当然,从进程角度看,其pid永远都不会变化。
空闲进程(idle process)——即当没有其他进程在运行时,内核所运行的进程——其pid值为0。在启动后,内核运行的第一个进程称为init进程,其pid值为1。一般来说,Linux中init进程就是init 程序。“init”这个术语不但表示内核运行的第一个进程,也表示完成该目的的程序名称。
除非用户显式告诉内核要运行哪个程序(通过init内核命令行参数),否则内核就必须自己指定合适的init程序——这种情况很少见,是内核策略的一个特例。Linux内核会尝试四个可执行文件,顺序如下。
1./sbin/init:init最有可能存在的地方,也是期望存在的地方。
2./etc/init:init另一个可能存在的地方。
3./bin/init:init可能存在的位置。
4./bin/sh:Bourne shell所在的位置,当内核没有找到init程序时,就会尝试运行它。
在以上四个可能位置中,最先被发现的就会当作init运行。如果四个运行都失败了,内核就会报警,系统挂起。
内核交出控制后,init会接着完成后续的启动过程。一般而言,这个过程包括初始化系统、启动各种服务以及启动登录进程。