centos,利用cgroup进行挂载,将当前进程挂载到另外一个进程上,作为子进程存在,当主进程退出后,子进程也退出
时间: 2023-12-02 08:03:24 浏览: 32
在 CentOS 上,可以使用 cgroups 进行进程管理,通过将一个进程挂载到另一个进程的 cgroup 中,可以使得子进程在主进程退出时也随之退出。具体实现步骤如下:
1. 安装 cgroup 工具
您可以使用以下命令安装 cgroup 工具:
```
sudo yum install libcgroup-tools
```
2. 创建 cgroup
使用以下命令创建一个名为 mygroup 的 cgroup:
```
sudo cgcreate -g cpu,memory:/mygroup
```
3. 将子进程挂载到 cgroup 中
使用以下命令将当前进程挂载到 mygroup cgroup 中:
```
sudo cgclassify -g cpu,memory:/mygroup [pid]
```
其中,[pid] 是子进程的进程 ID。这将把子进程的 CPU 和内存资源限制为 mygroup cgroup 中的限制。
4. 启动子进程
使用以下命令启动子进程:
```
sudo cgexec -g cpu,memory:/mygroup [command]
```
其中,[command] 是要启动的子进程的命令。
5. 退出主进程
当主进程退出时,子进程也会随之退出,因为它已经被挂载到主进程的 cgroup 中。
注意:如果您的系统没有启用 cgroup,请在启动时使用 "cgroup_enable=memory swapaccount=1" 内核参数。
相关问题
centos中,一个进程作为子进程挂载在另一个进程上,cgroup
在 CentOS 中,可以使用 cgroup 控制组来限制和管理进程的资源使用。可以使用以下步骤将一个进程作为子进程挂载在另一个进程的 cgroup 控制组中:
1. 创建一个 cgroup 控制组。可以使用以下命令创建名为 `mygroup` 的 cgroup 控制组:
```
sudo mkdir /sys/fs/cgroup/cpu/mygroup
```
2. 启动父进程,并将其加入 `mygroup` 控制组中。可以使用以下命令启动一个名为 `parent` 的进程,并将其加入 `mygroup` 控制组中:
```
sudo cgexec -g cpu:mygroup /path/to/parent
```
其中,`/path/to/parent` 是父进程的可执行文件路径。
3. 在父进程中启动子进程。可以使用以下代码在父进程中启动一个名为 `child` 的子进程:
```python
import os
os.system("cgexec -g cpu:mygroup /path/to/child")
```
其中,`/path/to/child` 是子进程的可执行文件路径。
4. 检查子进程是否已经被挂载到 `mygroup` 控制组中。可以使用以下命令查看 `mygroup` 控制组中的进程列表:
```
sudo cat /sys/fs/cgroup/cpu/mygroup/tasks
```
如果输出包含子进程的 PID,则说明子进程已经被成功挂载到 `mygroup` 控制组中。
注意,上述操作需要使用 root 权限执行。
centos中,如何将一个进程挂载在另一个进程上,cgroup
在 CentOS 中,可以使用 cgroup 控制组来限制和管理进程的资源使用。可以使用以下步骤将一个进程挂载在另一个进程上的 cgroup 控制组中:
1. 创建一个 cgroup 控制组。可以使用以下命令创建名为 `mygroup` 的 cgroup 控制组:
```
sudo mkdir /sys/fs/cgroup/cpu/mygroup
```
2. 将要挂载的进程的 PID 写入 cgroup 的 `tasks` 文件中。可以使用以下命令将 PID 为 `1234` 的进程挂载到 `mygroup` 控制组中:
```
sudo bash -c "echo 1234 > /sys/fs/cgroup/cpu/mygroup/tasks"
```
3. 检查进程是否已经被挂载到 `mygroup` 控制组中。可以使用以下命令查看 `mygroup` 控制组中的进程列表:
```
sudo cat /sys/fs/cgroup/cpu/mygroup/tasks
```
如果输出包含 PID 为 `1234` 的进程,则说明该进程已经被成功挂载到 `mygroup` 控制组中。
注意,上述操作需要使用 root 权限执行。