我们知道,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 来限制它。是否可以根据进程名称来限制进程?是否可以在执行进程之前对其进行限制?
答案1
控制组是基于 pid 的,并且没有直接的方法通过名称限制进程。 (由于控制组是分层的,所以这是有道理的:默认情况下,组还包含其成员进程的未来子级,并且让它们根据名称重新附加到另一个组将是令人惊讶的。)
使用控制组的典型方法是将父进程附加到它们,然后依赖于子进程继承其父进程组的事实。但是,有一个工具可以让您在给定组中启动进程cgexec
:
cgexec -g memory:foo yourcommand
在 Debian 上你会发现这个cgroup-tools
。