Linux PID 是如何生成的?
系统解析每个命令后,会创建一个单独的进程来执行该命令。这个新进程会被分配一个唯一的进程标识号 (PID)。系统使用 PID 来跟踪每个进程的当前状态。
注意 - Linux 命令区分大小写。
进程表
Linux 中的进程表只是计算机内存中的一个数据结构,几乎所有其他操作系统都是如此。它包含操作系统当前管理的进程的详细信息。
此数据包含每个进程的详细信息。
进程 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 中的进程交互的系统管理员和开发人员来说非常重要。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

