Linux PID 是如何生成的?
系统解释每个命令后,会建立一个单独的进程来执行该命令。这个新进程会分配一个独特的进程标识号 (PID)。系统使用 PID 来跟踪每个进程的当前状态。
注意 - Linux 命令区分大小写。
进程表
Linux 中的进程表就像几乎所有其他操作系统一样,只是计算机 RAM 中的一种数据结构。它包含有关操作系统当前正在管理的进程的详细信息。
此数据包含有关每个过程的广泛详细信息。
进程ID
进程所有者
进程优先级
每个进程的环境变量
父进程
已用时间
指向进程可执行机器代码的指针
运行以下命令以显示整个屏幕(或终端的完整窗口),其中包含系统当前状态以及使用大部分 CPU 的进程列表。
$ top
输出
top - 13:29:09 up 2 days, 7:13, 4 users, load average: 0.07, 0.02, 0.00
Tasks: 148 total, 1 running, 147 sleeping, 0 stopped, 0 zomb
Cpu(s): 0.6%us, 0.5%sy, 0.0%ni, 97.3%id, 1.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4051792k total, 4026104k used, 25688k free, 359168k buffers
Swap: 4096492k total, 24296k used, 4072196k free, 2806484k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7629 greys 20 0 749m 291m 28m S 1 7.4 16:51.40 firefox
19935 greys 20 0 133m 14m 10m S 0 0.4 2:38.52 smplayer
331 root 20 0 4020 880 592 S 0 0.0 0:00.96 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 /bin/sh
3 root RT -5 0 0 0 S 0 0.0 0:00.04 migration/0
5494 root 15 -5 0 0 0 S 0 0.0 0:00.90 khelper/0
13 root RT -5 0 0 0 S 0 0.0 0:00.00 kacpid
6 root RT -5 0 0 0 S 0 0.0 0:00.06 kacpi_notify
686 root 15 -5 0 0 0 S 0 0.0 0:01.32 ata/1
368 root RT -5 0 0 0 S 0 0.0 0:00.00 ata/0
21 root 15 -5 0 0 0 S 0 0.0 0:02.14 events/0
10 root 15 -5 0 0 0 S 0 0.0 0:01.44 events/1
这些是默认 top 输出包含的元素。
PID 生成
每个进程都有一个独特的标识符作为其表示,称为进程 ID (pid)。空闲进程及其 pid 号是内核启动的初始进程的名称。init 进程是启动后第一个启动的进程,其 pid 号为 1。
可以通过查阅 /proc/sys/kernel/pid_max 文件来确定系统的限制。
$ cat /proc/sys/kernel/pid_max
输出
420314
然后,我们确定了系统的最高 PID。下一步是启动四个 readlink 进程,每个进程都检查分配给它的新 PID。
largest=0
for pid in /proc/[0-9]*; do
pid="${pid##*/}" # Extract PID
[ "$pid" -gt "$largest" ] && largest="$pid" # -gt means "greater than"
done
printf "Largest PID is %d
" "$largest"
for _ in $(seq 4); do
printf "New process PID %d
" "$(readlink /proc/self)"
done
输出
Largest PID is 12648 New process PID 12650 New process PID 12651 New process PID 12652 New process PID 12653
由于 seq 命令固有的启动额外进程的能力,我们可以看到在检查最高 PID 和报告新 PID 之间存在 1 PID 的延迟。
使用 ps 命令
要使用 ps 命令查看正在运行的进程的 PID,可以在终端中执行以下命令。
$ ps aux
输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND webmast+ 1 0.0 0.0 1136 0 ? Ss 16:23 0:00 /sbin/docker- webmast+ 7 10.1 0.1 1012 233528 ? Rl 16:23 24:52 GROUND webmast+ 15430 0.0 0.0 2888 908 ? S 16:35 0:00 /bin/sh -c py webmast+ 15431 0.0 0.0 13788 20436 ? Sl 16:35 0:02 python3 main. webmast+ 91894 0.0 0.0 1028 22836 ? S 17:20 0:00 gnuplot webmast+ 91907 0.0 0.0 2888 948 ? S 17:20 0:00 /bin/sh -c oc webmast+ 91908 0.0 0.0 4316732 45844 ? Sl 17:20 0:01 /usr/bin/octa
此命令显示进程列表及其对应的 PID、用户信息、CPU 和内存使用情况以及其他详细信息。
使用 pgrep 命令
当使用特定搜索模式运行 pgrep 命令时,它会扫描正在运行的进程并将它们与提供的条件进行匹配。然后,它返回满足搜索条件的进程的 PID。
以下是如何使用 pgrep 命令查找具有特定名称的进程的示例:
$ pgrep <process_name>
将 <process_name> 替换为要查找的进程的名称。该命令将返回匹配的进程 ID (PID) 列表。
例如,如果要查找名为“python3”的进程的 PID,则运行:
输入
$ pgrep python3
输出
15431 173607 189388
输出将是名称为“python3”的进程的 PID 列表。
结论
在本文中,我们学习了 Linux 进程 ID、什么是进程表,以及 PID 的生成方式。PID 对于管理 Linux 中的进程至关重要。内核使用计数器和基本 PID 值为每个进程生成唯一的 PID。了解 PID 的生成方式对于需要管理和交互 Linux 中的进程的系统管理员和开发者非常重要。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP