subprocess
是我为 Lumper 实现的一个基础类,主要功能是创建子进程运行指定的 executable,同时支持 I/O 重定向和 clone flags。
因为 Lumper 的目的是实现一个类似 Docker 的东西,所以子进程的创建必须要用 SYS_clone
才能设置 namespace 进行隔离。许多直接使用 fork()
的三方库其实都是不满足要求的;而 Golang 的 cmd/exec
好巧不巧的实现上恰好使用了 SYS_clone
,算是捡了一个大便宜。