Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added docs/Ch04/images/PID_true.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions docs/Ch04/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,14 @@ root 14 0.0 0.0 0 0 ? S 02:33 0:00 [migration/0]

由于 kthreadd 运行于内核空间,故需按大写 K(++"Shift"++ + ++"k"++)键显示内核进程后才能看到。然而无论如何也不可能在 htop 中看到 0 号进程本体,只能发现 1 号和 2 号进程的 PPID (Parent PID) 是 0。

??? question "PID 真的标识的是进程吗?"

在 Linux 内核中,PID 实际上是被用来唯一标识内核调度的基本单位——**任务**(task),可以将其简单理解为 **线程**(thread)。对于单线程程序来说,一个进程里只有一个线程,因而 PID 就可以唯一标识该进程;但对于多线程程序来说,一个进程里有多个线程,每个线程都有自己的 PID,且所有线程都位于同一个 **线程组**(thread group)中,其唯一标识为 **线程组 ID**(TGID),与主线程的 PID 相同,因而 TGID 可以唯一标识该进程。

在 htop 中,使用快捷键 ++"Shift"++ + ++"H"++ 可以切换是否显示线程,在同时开启了显示线程和树形结构的情况下,可以看到同一进程的其他线程均归属于主线程之下。

![PID_true](images/PID_true.png)

### 进程优先级与状态 {#process-priority-and-stat}

我们平时使用操作系统的时候,可能同时会开启浏览器、聊天软件、音乐播放器、文本编辑器……前面提到它们都是进程,但是单个 CPU 核心一次只能执行一个进程。为了让这些软件看起来「同时」在执行,操作系统需要用非常快的速度将计算资源在这些进程之间切换,这也就引入了进程优先级和进程状态的概念。
Expand Down