Linux PIDs 是如何生成的

Linux PIDs 是如何生成的

根据系统对每个命令的解释,会建立一个独立的进程来执行该命令。这个新进程被分配一个独特的进程标识号(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

这些是默认顶部输出所包含的元素。

PID生成

每个进程都有一个独特的标识符,称为进程ID(pid),用来表示它。空闲进程及其pid号是内核启动的初始进程的名称。具有pid号1的init进程是在引导之后启动的第一个进程。

可以通过查看/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

由于序列命令具有启动额外进程的内在能力,因此我们可以看到在检查最高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>

替换为您要查找的进程名称。该命令将返回一列匹配的进程 ID(PID)。

例如,如果您要查找名称为”python3″的进程的 PID,您可以执行以下操作 –

输入

$ pgrep python3

输出

15431
173607
189388

输出将会是名为”python3″的进程的PID列表。

结论

在本文中,我们了解了Linux进程ID,进程表的含义,以及如何生成PID。在Linux中,PID对于管理进程至关重要。内核使用计数器和基本PID值为每个进程生成唯一的PID。了解PID的生成方式对于需要在Linux中管理和与进程交互的系统管理员和开发人员非常重要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程