Skip to content

Commit 0af1282

Browse files
committed
Merge pull request #1 from tobegit3hub/master
merge
2 parents d768069 + b9e104d commit 0af1282

File tree

24 files changed

+94
-74
lines changed

24 files changed

+94
-74
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ _book
1717
# eBook build output
1818
*.epub
1919
*.mobi
20-
*.pdf
20+
# *.pdf
2121

2222

Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
FROM ubuntu:14.10
2+
MAINTAINER tobe tobeg3oogle@gmail.com
3+
4+
RUN apt-get -y update
5+
6+
# Install gitbook
7+
RUN apt-get install -y curl && \
8+
curl -sL https://deb.nodesource.com/setup | bash - && \
9+
apt-get install -y nodejs && \
10+
npm install gitbook -g
11+
12+
# Add the book
13+
ADD . /understand_linux_process
14+
WORKDIR /understand_linux_process
15+
16+
EXPOSE 4000
17+
18+
CMD ["gitbook", "serve", "."]

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
*理解Linux进程*用Go重写了所有示例程序,通过循序渐进的方法介绍Linux进程的工作原理和一切你所需要知道的概念。
99

10-
本书适合所有Linux程序员阅读。[在线阅读](http://tobegit3hub1.gitbooks.io/understanding-linux-processes/content/)[PDF下载](https://www.gitbook.com/download/pdf/book/tobegit3hub1/understanding-linux-processes)
10+
本书适合所有Linux程序员阅读。[在线阅读](http://www.linuxprocess.com)[PDF下载](https://github.com/tobegit3hub/understand_linux_process/blob/master/understan_linux_process.pdf?raw=true)
1111

1212
## 三位好朋友
1313

foreword/thanks.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
<br/><br/><br/>
2+
<br/><br/>
33

44
<div align="center">Thanks <i>Wawa Leung</i></div>
55

6-
<div align="center">Otherwise this book would be released two year ago</div>
6+
<div align="center">Otherwise the book would be released two years ago</div>

go_example/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
## 第二章 Go编程实例
33

4-
学习完进程基础知识,我们通过几个Go编程实例介绍如果使用Go运行外部进程
4+
学习完进程基础知识,我们通过几个Go编程实例介绍如何使用Go运行外部进程
55

66
这章主要是编程练习,学习完这章后对进程的使用和Go对进程的使用应该都有更深的理解。

notice/mkdir.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ func main() {
5656

5757
fmt.Println("Mkdir /tmp/gotest/")
5858
}
59+
```
5960

6061
## 注意事项
6162

notice/sigkill.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ signal.Notify(c, syscall.SIGKILL, syscall.SIGSTOP)
1212

1313
## 注意事项
1414

15-
这是Linux内核的限制,这种限制也是为了让操作系统有可能控制进程的生命周期,如果理解后我们也不应该尝试也捕获SIGKILL
15+
这是Linux内核的限制,这种限制也是为了让操作系统有可能控制进程的生命周期,理解后我们也不应该去尝试捕获SIGKILL
1616

1717
不过还是有人这样去做,最后结果也不符合预期,这需要我们对底层有足够的理解。

process_advanced/copy_on_write.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
## 写时复制(Copy On Write)
33

4-
一般我们运行程序都是Fork一个进程后马上执行Exec加载程序,而Fork的是否实际上用的是父进程的堆栈空间,Linux通过Copy On Write技术极大地减少了Fork的开销。
4+
一般我们运行程序都是Fork一个进程后马上执行Exec加载程序,而Fork的时候实际上用的是父进程的堆栈空间,Linux通过Copy On Write技术极大地减少了Fork的开销。
55

6-
Copy On Write的含义是只有真正写的时候才把数据写到子进程的数据,Fork时只会把页表复制到子进程,这样父子进程都指向同一个物理内存页,只有再写子进程的时候才会把内存也的内容重新复制一份
6+
Copy On Write的含义是只有真正写的时候才把数据写到子进程的数据,Fork时只会把页表复制到子进程,这样父子进程都指向同一个物理内存页,只有再写子进程的时候才会把内存页的内容重新复制一份

process_advanced/daemon_process.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,30 @@
55

66
## 实现守护进程
77

8+
首先要保证进程在后台运行,可以在启动程序后面加`&`,当然更原始的方法是进程自己`fork`然后结束父进程。
9+
10+
```c
11+
if (pid=fork()) {
12+
exit(0); // Parent process
13+
}
14+
```
15+
16+
然后是与终端、进程组、会话(Session)分离。每个进程创建时都绑定一个终端,而且属于一个进程组(进程组也有GID不过等同进程组长的PID),这些进程组在一个会话中,如果是子进程一般会从父进程继承这些信息,想要与环境分离可以使用以下的系统调用。
17+
18+
```c
19+
setsid();
20+
```
21+
22+
同样地我们会从父进程继承文件掩码(mask),可以手动清理掩码。
23+
24+
```c
25+
umask(0);
26+
```
27+
28+
如果需要我们可以改变当前工作目录,避免运行时必须使用当前所在的文件系统。
29+
30+
## 使用Nohup
31+
832
前面提到过`nohup`命令,是让程序以守护进程运行的方式之一,程序运行后忽略SIGHUP信号,也就说关闭终端不会影响进程的运行。
933
1034
类似的命令还有`disown`,这里不再详述。
11-
12-
更好的方法是让程序本身处理这些信号,它必须处理好`SIGHUP``setsid`等信息。

process_advanced/ipc.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
## 进程间通信
33

4-
IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号灯或Socket等
4+
IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号量或Socket等
55

66
## 管道(Pipe)
77

@@ -19,9 +19,9 @@ IPC全称Interprocess Communication,指进程间协作的各种方法,当然
1919

2020
后面也会有更详细的介绍。
2121

22-
## 信号灯(Semaphore)
22+
## 信号量(Semaphore)
2323

24-
信号灯本质上是一个整型计数器,调用`wait`时计数减一,减到零开始阻塞进程,从而达到进程、线程间协作的作用。
24+
信号量本质上是一个整型计数器,调用`wait`时计数减一,减到零开始阻塞进程,从而达到进程、线程间协作的作用。
2525

2626
## 套接口(Socket)
2727

0 commit comments

Comments
 (0)