众所周知,cgroups
可以限制进程的cpu使用。这是一个例子:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30142 root 20 0 104m 2520 1024 R 99.7 0.1 14:38.97 sh
我有一个进程,其 pid 为 30142。我可以将其限制如下:
mkdir -p /sys/fs/cgroup/memory/foo
echo 1048576 > /cgroup/memory/foo/memory.limit_in_bytes
echo 30142 > /cgroup/memory/foo/tasks
正如我们看到的,如果我想限制一个进程,我必须先执行它,然后我可以根据它的pid来限制它。是否可以根据名称来限制进程?是否可以在执行之前限制进程?
控制组是基于 pid 的,并且没有直接通过名称限制进程的方法。(由于控制组是分层的,这是有道理的:默认情况下,一个组还包含其成员进程的未来子进程,并且让它们根据其名称重新连接到另一个组会令人惊讶。)
使用控制组的典型方法是将父进程附加到它们,然后依赖子进程继承其父组的事实。但是,有一个工具可以让您在给定的组中启动一个进程
cgexec
:在 Debian 上,您会在
cgroup-tools
.