Linux

如何在單獨的 pid 命名空間中生成每個子程序

  • December 18, 2020

如何使用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)錯誤。

通過閱讀手冊unshare CLONE_NEWPID,它作用於呼叫過程,而不是孩子。多次呼叫它似乎是多餘的。第一次呼叫後,所有孩子都在一個新的 pid 命名空間中。

要將它們放在自己的位置,您需要另一個父級來呼叫unshare CLONE_NEWPID.

嘗試

repeat:
   fork
   if child:
       unshare CLONE_NEWPID
       spawn 

這一切都未經測試,這正是我接下來要嘗試的。我也在閱讀您需要使用clone.

引用自:https://unix.stackexchange.com/questions/625157