如何在单独的 pid 命名空间中生成每个子进程

如何在单独的 pid 命名空间中生成每个子进程

如何使用unshare(不使用CLONE_NEWPID flag in child process clone syscall)在单独的 PID 命名空间中生成每个子进程。我能够在 PID 命名空间中成功生成第一个子项,但我不确定如何在另一个 PID 命名空间中生成第二个子项。

父进程的伪代码

1 unshare CLONE_NEWPID
2 spawn child1
3
4 unshare CLONE_NEWPID
5 spawn child2

这里,child1 进入了单独的 PID 命名空间,并获得了 PID 为 1。当执行到第 4 行时,它抛出了Sys(EINVAL)错误。

答案1

阅读手册unshare CLONE_NEWPID会作用于调用过程,而不是子进程。多次调用这个似乎是多余的。第一次调用后,所有子进程都位于新的 pid 命名空间中。

要将它们放在自己的位置,您需要另一个父级来调用unshare CLONE_NEWPID

尝试

repeat:
    fork
    if child:
        unshare CLONE_NEWPID
        spawn 

这一切都未经测试,这正是我接下来要尝试的。我还读到您需要使用clone.

相关内容