概述
PID namespace是用来隔离进程 id。
源码
package main
import (
"os/exec"
"syscall"
"os"
"log"
)
func main() {
cmd := exec.Command("sh")
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID,
}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
}
测试
go run pid.go
sh-4.2# echo $$
1
//宿主机上显示进程15117
[root@VM_0_10_centos ~]# pstree -pl
|-sshd(14885)---bash(14888)---go(15117)-+-pid(15138)-+-sh(15142)
| | |-{pid}(15139)
| | `-{pid}(15140)
| |-{go}(15118)
| |-{go}(15119)
| |-{go}(15120)
| |-{go}(15121)
| |-{go}(15128)
| `-{go}(15141)