现在的位置: 首页 > 综合 > 正文

虚拟化下的进程演变(三)—繁衍

2013年11月02日 ⁄ 综合 ⁄ 共 530字 ⁄ 字号 评论关闭

Unix/Linux的世界,除init进程外,没有进程是从石头缝蹦出来的,也就是Init进程承担着祖师爷的角色。一个进程PID命名空间的诞生也遵循繁衍的规则,只是这种繁衍不是克隆一个进程,而是克隆一个小国,因此,clone()个系统调用依然粉墨登场。旧瓶装新酒,内核补丁提交者在<inux/sched.h>中增加一个新的标志

#define
CLONE_NEWPID   0x20000000 /* New pid namespace */

  看似这么简单的一个定义,让clone()就可以克隆PID命名空间。具体用法参见 Linux PID namespace一文。

  在新的命名空间中, init进程与生俱来,为1号进程,由他繁衍其他后代,其PID依次为2,3。如果有孤儿进程,init依然会作为养父将孤儿收养,但与根红苗正的ini进程不同,命名空间中的init可以死亡,果真如此,整个命名空间也就没有存在的意义,自行消亡。

  别以为新的命名空间与父亲有同等的地位。一旦一个新的PID命名空间诞生,父空间中的所有进程可以与孩子空间中的进程打交道,但反之则不然,也就是子空间根本就看不见父空间。这还意味着,此时,每个进程(比如init)不止一个PID-在每个空间中都有自己的PID

抱歉!评论已关闭.