Skip to content

Commit b19275e

Browse files
committed
Add process_advanced cgroups
1 parent d981077 commit b19275e

File tree

6 files changed

+42
-3
lines changed

6 files changed

+42
-3
lines changed

SUMMARY.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,19 @@
2222
* [死锁](process_basic/deadlock.md)
2323
* [活锁](process_basic/livelock.md)
2424
* [POSIX](process_basic/posix.md)
25+
* [Nohup](process_basic/nohup.md)
2526
* [运行进程](process_basic/run_process.md)
2627
* [Go编程实例](go_example/README.md)
2728
* [衍生新进程](go_example/spawn.md)
2829
* [执行外部程序](go_example/exec.md)
2930
* [复制进程](go_example/fork.md)
31+
* [克隆进程](go_example/clone.md)
3032
* [进程进阶](process_advanced/README.md)
3133
* [进程锁](process_advanced/process_lock.md)
3234
* [孤儿进程](process_advanced/orphan_process.md)
3335
* [僵尸进程](process_advanced/zombie_process.md)
3436
* [守护进程](process_advanced/daemon_process.md)
35-
* [进程通信](process_advanced/ipc.md)
37+
* [进程间通信](process_advanced/ipc.md)
3638
* [管道](process_advanced/pipe.md)
3739
* [信号](process_advanced/signal.md)
3840
* [中断](process_advanced/interrupt.md)
@@ -41,6 +43,7 @@
4143
* [互斥锁](process_advanced/mutex.md)
4244
* [共享内存](process_advanced/share_memory.md))
4345
* [Cgroups](process_advanced/cgroups.md)
46+
* [Namespaces](process_advanced/namespaces.md)
4447
* [Go实现系统调用](process_advanced/go_implement.md)
4548
* [项目实例Run](project_run/README.md)
4649
* [项目架构](project_run/architecture.md)

go_example/clone.md

Whitespace-only changes.

go_example/exec.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
## 代码实现
99

10-
```
10+
```golang
1111
package main
1212

1313
import "syscall"

go_example/spawn.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
## 代码实现
99

10-
```
10+
```golang
1111
package main
1212

1313
import "fmt"

process_advanced/cgroups.md

+17
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,19 @@
11

22
## Cgroups
3+
4+
Cgroups全称Control Groups,是Linux内核用于资源隔离的技术。目前Cgroups可以控制CPU、内存、磁盘访问。
5+
6+
## 使用
7+
8+
Cgroups是在Linux 2.6.24合并到内核的,不过项目在不断完善,3.8内核加入了对内存的控制(kmemcg)。
9+
10+
要使用Cgroups非常简单,阅读前建议看sysadmincasts的视频,https://sysadmincasts.com/episodes/14-introduction-to-linux-control-groups-cgroups。
11+
12+
我们首先在文件系统创建Cgroups组,然后修改这个组的属性,启动进程时指定加入的Cgroups组,这样进程相当于在一个受限的资源内运行了。
13+
14+
## 实现
15+
16+
Cgroups的实现也不是特别复杂。有一个特殊的数据结构记录进程组的信息。
17+
18+
19+
有人可能已经知道Cgroups是Docker容器技术的基础,另一项技术也是大名鼎鼎的Namespaces。

process_advanced/signal.md

+19
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,21 @@
11

22
## 信号
3+
4+
```golang
5+
import os/signal
6+
7+
siganl.Notify()
8+
signal.Stop()
9+
```
10+
11+
## 实时信号
12+
13+
`kill -l`
14+
15+
16+
SIGRTMIN+xxxx
17+
18+
19+
## 命令
20+
21+
我们常用`Ctrl c`来停止正在运行的命令,这是什么意思呢?发送SIGXXX

0 commit comments

Comments
 (0)