Giter VIP home page Giter VIP logo

understand_linux_process's Introduction

理解Linux进程

关于这本书

本书受理解Unix进程启发而作,用极简的篇幅深入学习进程知识。

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

本书适合所有Linux程序员阅读。在线阅读PDF下载

三位好朋友

阅读前介绍三位即将与大家打交道的小伙伴:Linux、Go和Docker。

Linux是我们主要的研究对象,书中所有概念与程序都基于Linux,这同样适用于所有Unix-like系统。

Go是本书所有示例程序的实现语言,当然进程的概念与原理是相通的,你也可以使用其他编程语言实现。

Docker为我们创造可重复的实验环境,使用Docker容器你可以轻易地模拟与本书一模一样的运行环境。

understand_linux_process's People

Contributors

7anshuai avatar blkart avatar coosir avatar fugr avatar hydranger avatar overtrue avatar rocfang avatar samypesse avatar tobegit3hub avatar weidagang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

understand_linux_process's Issues

僵尸进程章节中拼写错误

在僵尸进程章节中第二段:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

Domain expired

The domain of the website for "read online" link in the README, which is www.linuxprocess.com, seems to be expired.

一个bash退出码解释的错误

在**_进程基础**_一章的**_退出码**_一节的**_使用退出码**_小节中,第二段:

当然有意义,我们在写Bash脚本时,可以根据前一个命令的退出码选择是否执行下一个命令。例如安装Run程序的命令 wget
https://raw.githubusercontent.com/runscripts/run/packages/packages/darwin_amd64/run || sudo run --init ,只有下载脚本成功才会执行后面的安装命令。

在上面的命令中解释中,实际情况是wget执行成功之后,不会执行run,除非wget执行失败,才会执行run!是否应该将||修改为&&?

pdf 文本的问题

在 PPID 章节,有 “进程号为1的进程并没有PPID。”,我在机器上 ps -ef 查看之后发现 pid 为1的进程,ppid 为 0.虽然没有实际进程对应,但是 PPID 这个数字还是有的。

Several typos

  1. /process_advanced/ipc.md (Line 26)

    Original: 套接口(Socket)

    Revised: 套接(Socket)

  2. /process_advanced/system_call.md (Line 4)

    Original: 开发者运行得进程运行在用户态(todo: user space)

    Revised: 开发者运行进程运行在用户态(todo: user space)

  3. /process_advanced/namespaces.md (Line12)

    Original: 创建进程时使用clone取代fork即刻创建同一命名空间下的进程。

    Revised: 创建进程时使用clone取代fork创建同一命名空间下的进程。

  4. /reference/README.md (Line 4)

    Original: 最后一章列举本文参考的过的书籍和项目

    Revised: 最后一章列举本文参考过的书籍和项目

  5. /process_advanced/fd.md (Line 18)

    Original: 我们网上看到配置ulimit也是为了调大系统的打开文件个数

    Revised: 我们网上看到配置ulimit也是为了调系统的打开文件个数

  6. /process_basic/posix.md (Line 18)

    Original: 这是非常严谨的文档,感兴趣的同学可以读下,对普通的程序员我们还是以下的内容。

    Revised: 这是非常严谨的文档,感兴趣的同学可以读下,对普通的程序员我们还是建议了解以下的内容。

  7. /process_advanced/file_lock.md (Line 14)

    Original: 这样我们很容易可以实和读锁,但是所有流程都需要自己控制。

    Revised: 这样我们很容易可以**实现【待修改】**读锁,但是所有流程都需要自己控制。

nohup error

"它能让进程脱离终端运行,关闭终端后也不会给进程发信号。" 使用nohup后,进程并没有脱离终端,关闭终端时,系统会按照正流程给此终端下的每一个进程发送SIGHUP信号,用nohup启动的进程会忽略这个信号,所以终端退出,进程不会退出。

进程状态章节关于最新 Linux 源码中状态的描述

在 Linux 4.14-rc3 之后的源代码中,关于 进程状态的描述添加了 P (parked)I (idle) 的状态

static const char * const task_state_array[] = {

	/* states in TASK_REPORT: */
	"R (running)",		/* 0x00 */
	"S (sleeping)",		/* 0x01 */
	"D (disk sleep)",	/* 0x02 */
	"T (stopped)",		/* 0x04 */
	"t (tracing stop)",	/* 0x08 */
	"X (dead)",		/* 0x10 */
	"Z (zombie)",		/* 0x20 */
	"P (parked)",		/* 0x40 */

	/* states beyond TASK_REPORT: */
	"I (idle)",		/* 0x80 */
};

1.10进程越多越好错别字

特殊情况

我们想想进程数应该等于CPU数,但是如果进程有阻塞呢?这是应该提高进程数增加并行数的

第一个‘是’是否应该是‘时’。

:)

【错别字】进程越多越好?

文件:/process_basic/the_more_the_better.md(第18行)

原文:我们想想进程数应该等于CPU数,但是如果进程有阻塞呢?这是是应该提高进程数增加并行数的。

更正:我们想想进程数应该等于CPU数,但是如果进程有阻塞呢?这是应该提高进程数增加并行数的。

写时复制(Copy On Write)章节问题

第一段:一般我们运行程序都是Fork一个进程后马上执行Exec加载程序,而Fork的是否实际上用的是父进程的堆栈空间,Linux通过Copy On Write技术极大地减少了Fork的开销。 读起来并不顺,是否该改为 Fork实际上用的是父进程的堆栈空间

第二段:Copy On Write的含义是只有真正写的时候才把数据写到子进程的数据,Fork时只会把页表复制到子进程,这样父子进程都指向同一个物理内存页,只有写子进程的时候才会把内存页的内容重新复制一份。 是否改改为

Add pipe

It's import and we can write a example for it.

Add program of orphan process

## 编程实例

如何创建孤儿进程呢?只要创建一个进程,把父进程杀掉,子进程就是孤儿进程了。

Typo in spawn

File: /go_example/spawn.md (Line 6)

Original: 它能够执行任意Go或者非Go程序,并且等待放回结果,外部进程结束后继续执行本程序。

Revise: 它能够执行任意Go或者非Go程序,并且等待回结果,外部进程结束后继续执行本程序。

Text size varies

The size of pdf file I downloaded is different, which affects the reading. Is this a production problem?
like this:

Add cgo example

I'm gonna learn more about this for advanced usage of process.

POSIX

POSIX一节,有的地方书写错误,写成了POXIS。

Ambiguous description of "exit code/status"

File: /process_basic/exit_code.md (Line 4)

Original: 任何进程退出时,都会留下退出码,操作系统根据退出码可以知道进程是否正常运行。

Revise: 任何进程退出时,都会留下退出码,操作系统根据退出码可以知道进程是否正常结束/退出/终止

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.