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