您的位置:首页 > 其它

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

2010-02-10 23:45 155 查看
在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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐