陈莉君 2010年02月10日 星期三 23:51 | 1876次浏览 | 11条评论
在 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 依然会作为养父将孤儿收养,但与根红苗正的 init 进程不同,命名空间中的 init 可以死亡,果真如此,整个命名空间也就没有存在的意义,自行消亡。
别以为新的命名空间与父亲有同等的地位。一旦一个新的 PID 命名空间诞生,父空间中的所有进程可以与孩子空间中的进程打交道,但反之则不然,也就是子空间根本就看不见父空间。这还意味着,此时,每个进程(比如 init )不止一个 PID- 在每个空间中都有自己的 PID 。
Zeuux © 2024
京ICP备05028076号
回复 郎咸武 2010年03月01日 星期一 18:35
下面 一段没怎么
怎么突