diff --git a/docs/Ch04/images/PID_true.png b/docs/Ch04/images/PID_true.png new file mode 100644 index 00000000..03f0fbcf Binary files /dev/null and b/docs/Ch04/images/PID_true.png differ diff --git a/docs/Ch04/index.md b/docs/Ch04/index.md index 6fc88c9d..1d490ccc 100644 --- a/docs/Ch04/index.md +++ b/docs/Ch04/index.md @@ -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 核心一次只能执行一个进程。为了让这些软件看起来「同时」在执行,操作系统需要用非常快的速度将计算资源在这些进程之间切换,这也就引入了进程优先级和进程状态的概念。