我是cgroup的新人,我试图用它控制Linux服务器上的两个C ++进程。
我将每个进程的mem_limit设置为1G,这意味着它最多可以消耗1GB内存,对吧?
但我认为cgroup不保证像VM一样真正的隔离,例如,一个进程仍然可以读取(或写入)另一个进程的内存。 由于cgroup没有为它们分配任何内容,因此两个进程之间也会竞争以获取空闲内存块。
我用谷歌搜索它但只得到了很多" docker vs vm",这真的不是我想要的。
实施cgroup的任何提示都非常有用。
答案 0 :(得分:2)
首先,你误解了 cgroups 是什么。它不是一个隔离工具,它是资源限制工具,可以限制内存,CPU,I / O消耗,如mem_limit。
但是,每个进程都有自己唯一的地址空间,因此当进程1 在CPU上运行时,进程2 页表不会被使用,所以进程1 无法通过简单地解除引用指针来获取进程2 变量。 虚拟内存已经是一种隔离技术。
有一些方法(通常由调试器使用)来访问Linux中的其他进程内存:
/proc/PID/mem
。如果您检查该文件的权限,您将看到只有相同的用户或root可以访问它。process_vm_{readv,writev}
系统调用。他们检查用户是否具有CAP_SYS_PTRACE能力。因此,有几个选项可以禁止其他进程访问其他内存:
恕我直言(1)足够了,(3)是偏执狂;)