我基本上想要cgexec
的功能,但是从C或Go程序调用(有点像fork),我在现有的库中找不到任何这样的功能。
我知道我可以在Go中使用exec
,但这看起来有点难看,我觉得必须有一种更惯用的方法来实现这一目标。感谢。
答案 0 :(得分:0)
总结:只需运行 cgexec 即可启动该过程。请注意,cgexec **exec()** 是所需的程序。它不会fork()并在后台运行它。
TL;博士;
我在这里说的是相对无知 - 我遇到了同样的问题,并且正在研究如何去做。但是,我认为解决方案非常清楚。这是我的分析:
通过查看 cgexec.c 中 cgexec 的源代码,您可以看到 main() 做了三件事:
记住 cgexec 是一个二进制文件。它不是图书馆。
我对此的看法是二进制文件将自身放入请求的 cgroup 环境中,然后执行请求的程序。
要完全在 golang 中执行此操作,您必须启动一个新进程,然后在其中执行二进制文件 - 这与 cgexec 所做的完全相同。通过在程序中编写 golang 代码,没有简单/直接的方法可以做到这一点。你不想想要在 golang 程序中 fork!
由于您将不得不 fork/exec something,您不妨使用 os.StartProcess 或 os/exec.Command(. ..).Run() 运行 cgexec。它是完全安全的,并且您可以保证获得与 cgexec 相同的广为人知的语义。