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 中的程序的系統管理員和開發者非常重要。

更新於:2023年8月1日

119 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.