Jump to content
View in the app

A better way to browse. Learn more.

PHP论坛人

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Debian 13 查詢執行的進程 (Process) + 管理 + 維運

Featured Replies

Debian 13 查詢執行的進程 (Process) + 管理 + 維運


------
前言
------

在 Linux 系統管理中,掌握「目前系統正在執行哪些進程(Process)」是基本且重要的技能。無論是:

排查 CPU 或記憶體資源占用過高

找出異常或惡意進程

確認某項服務是否正常啟動

分析系統效能瓶頸

都需要依賴進程查詢工具



-------------------------
什麼是進程 (Process)?
-------------------------

進程是作業系統分配資源、排程執行的基本單位,每個正在執行的程式都是一個或多個進程

每個進程都有唯一的 PID (Process ID),以及一個父進程 PPID (Parent PID)

進程之間形成樹狀結構,systemd (PID 1) 是所有用戶空間進程的根



進程狀態說明

Linux 進程有以下幾種狀態,在 top / ps 的狀態欄 (S 欄) 中以單一字母表示:

代碼	狀態名稱		說明

R	執行中 (Running)	正在CPU上執行,或在執行佇列中等待

S	休眠 (Sleeping)		可中斷休眠,等待事件 (如 I/O 完成),可被訊號喚醒

D	不可中斷休眠		通常是等待磁碟 I/O,不可被訊號中斷,出現大量 D 表示 I/O 瓶頸

Z	殭屍 (Zombie)		已結束但父程序尚未回收,佔用 PID,不佔 CPU/記憶體

T	已停止 (Stopped)	收到 SIGSTOP 或 SIGTSTP (Ctrl+Z) 而暫停

I	閒置 (Idle)		核心執行緒閒置中,Debian 新版核心出現





--------------------------------
使用 top 指令 (即時動態監控)
--------------------------------

top 是 Linux 系統預設安裝的即時進程監控工具

啟動後會以全螢幕模式持續更新,顯示 CPU 使用率、記憶體用量、進程列表等資訊,預設每 3 秒刷新一次

基本指令
top



top介面說明

系統摘要區 (前5行)

系統時間、開機時間、登入人數

CPU 使用率 (us:使用者、sy:系統、ni:優先級調整、id:閒置、wa:I/O 等待、hi:硬體中斷、si:軟體中斷、st:虛擬機器偷取時間)

記憶體使用情況 (總量、已用、空閒、緩衝/快取)

Swap 使用情況 (總量、已用、空閒、可用記憶體)



程序列表區
PID:程序 ID
USER:執行程序的用戶
PR:優先級
NI:Nice 值 (優先級調整)
VIRT:虛擬記憶體使用量
RES:實際實體記憶體使用量
SHR:共享記憶體使用量
S:程序狀態 (R:執行中、S:休眠、D:不可中斷休眠、Z:殭屍、T:停止)
%CPU:CPU 使用率
%MEM:記憶體使用率
TIME+:累積 CPU 使用時間
COMMAND:程序名稱




常用操作按鍵
按鍵	功能說明
q	離開 top
h	顯示說明
k	終止程序 (需輸入 PID)
u	只顯示特定用戶的程序
M	依記憶體使用率排序
P	依 CPU 使用率排序
N	依 PID 排序
T	依累積時間排序
1	顯示各別 CPU 核心狀態
c	切換顯示完整指令路徑
space	立即刷新畫面
d 或 s	變更刷新間隔 (秒)
r	調整 Nice 值
f	進入欄位管理畫面 (可新增/移除顯示欄位)
W	儲存目前的 top 設定到 ~/.toprc



進階使用技巧

只顯示特定用戶的程序
top -u username


設定更新頻率 (單位:秒)
top -d 3



在批次模式下執行一次後結束 (適合寫入腳本)
top -b -n 1



監控特定 PID
top -p 1234,5678



搭配 pgrep 動態監控特定程序
top -p $(pgrep -d',' nginx)



建議
top 的設定會儲存在 ~/.toprc。按 W 可儲存目前設定,下次啟動時自動套用






-------------------------------
使用 htop 指令 (增強版 top)
-------------------------------

htop 是 top 的加強版,提供彩色化介面、滑鼠支援、更直覺的操作方式,以及樹狀進程顯示

它不是系統預設安裝的工具,需要手動安裝



更新套件庫
apt update


安裝 htop
apt install htop


基本指令
htop




htop 特色功能

彩色介面:直觀顯示不同類型的資訊,CPU 條以不同顏色區分 user/system/nice/I/O wait

滑鼠支援:可直接點擊排序欄位、選取進程、按選單按鈕

樹狀結構:按 F5 顯示進程的父子關係,一目了然

垂直/水平捲動:可查看完整的指令列

進程標記:可同時標記多個進程進行批次操作

圖形化顯示:CPU、記憶體、Swap 使用條 (可在設定中調整顯示內容)

即時搜尋:按 F3 可即時過濾搜尋進程名稱



常用操作按鍵

按鍵	功能說明

F1	顯示說明
F2	進入設定 (可調整顯示欄位、顏色主題)
F3	搜尋程序名稱
F4	過濾程序 (只顯示符合條件的)
F5	切換樹狀檢視 (顯示父子關係)
F6	選擇排序方式
F7 / F8	調整 Nice 值 (F7 降低 / F8 提高優先級)
F9	終止程序 (可互動選擇訊號類型)
F10	離開 htop
空白鍵	標記/取消標記進程 (可批次操作)
u	切換顯示特定用戶的程序
t	切換樹狀模式
I	反轉排序方向
H	切換顯示/隱藏使用者執行緒
K	切換顯示/隱藏核心執行緒





實用參數範例

只顯示特定用戶的程序
htop -u username


以樹狀結構啟動
htop -t


依 CPU 使用率排序啟動
htop --sort-key PERCENT_CPU



建議

htop 的設定儲存在 ~/.config/htop/htoprc

按 F2 進入設定介面,可調整顯示欄位、顏色主題、Meter 顯示方式,並選擇在啟動時預設使用樹狀檢視

設定會在按 F10 離開時自動儲存





---------------------------
使用 ps 指令 (靜態查詢)
---------------------------

ps (Process Status) 是以快照方式列出進程清單的工具,執行後立即輸出當下的進程狀態並退出,不像 top / htop 那樣持續刷新

ps 非常適合與其他指令搭配,例如 grep、awk,或在 Shell 指令稿中使用




基本用法

顯示目前終端機的程序
ps

顯示所有程序
ps -e
或
ps -A

完整程序列表 (最常用)
ps aux

參數說明:
a:顯示所有終端機的程序
u:以用戶為導向顯示詳細資訊
x:顯示沒有控制終端的程序


顯示程序樹 (包含子程序)
ps -axjf
或
ps -ef --forest

參數說明:
-a:顯示所有終端機的程序
-x:顯示沒有控制終端的程序
-j:使用工作格式 (jobs format)
f:以樹狀結構顯示





------------------
自訂顯示欄位
------------------

只顯示特定欄位,並依 CPU 排序
ps -eo pid,ppid,user,cmd,%cpu,%mem --sort=-%cpu



顯示完整指令路徑
ps -ef


顯示進程啟動時間
ps -eo pid,ppid,user,start,time,cmd --sort=start




----------------
常用過濾技巧
----------------

----------------
依程序名稱搜尋
----------------

ps aux | grep nginx


排除 grep 本身
ps aux | grep nginx | grep -v grep


更專業的寫法
ps aux | grep '[n]ginx'


-------------
依用戶過濾
-------------

ps -u username

顯示 root 用戶的程序
ps -U root -u root


-------------
依 PID 查詢
-------------

ps -p 1234

ps -p 1234,5678


----------------------------
顯示特定程序的所有執行緒
----------------------------

ps -L -p 1234



----------------
進階過濾範例
----------------

顯示所有殭屍進程
ps aux | awk '$8=="Z"'


顯示CPU使用率超過 50% 的進程
ps aux --sort=-%cpu | awk '$3>50'


查詢特定指令的 PID (輸出只有數字,適合腳本)
ps -C nginx -o pid=


依記憶體使用排序,取前10名
ps aux --sort=-%mem | head -11





--------------------------------
lsof 查詢連接埠與開啟的檔案
--------------------------------

lsof 可以顯示系統中所有開啟的檔案 (在Linux中,網路連接、Socket、設備也都是「檔案」)

想知道是哪個程式佔用了特定連接埠,lsof 是最直接的工具


安裝 lsof
apt install lsof


基本用法

查詢佔用 TCP/UDP port 80 的程序
lsof -i :80
 
查詢特定協定
lsof -i tcp:22

lsof -i udp:53

 
顯示所有監聽中的連接埠 (-P 不解析埠號名稱,-n 不解析主機名)
lsof -i -P -n | grep LISTEN


警告

lsof 需要 root 或 sudo 權限才能查看所有進程的連接。一般使用者只能看到自己的程序




其他實用查詢

查詢某個檔案被哪些程序使用
lsof /var/log/syslog


查詢某個用戶開啟的檔案
lsof -u username


查詢某個程序開啟的檔案
lsof -p 1234


查詢程序正在監聽哪些 port (結合 netstat)
netstat -tulpn | grep :80


或使用較新的 ss 指令
ss -tulpn | grep :80



注意

現代Debian系統中,ss 指令 (來自 iproute2 套件) 已取代 netstat 成為推薦工具

若 netstat 未安裝,可執行:apt install net-tools 安裝,或改用 ss



--------------
終止進程 kill
--------------

終止進程最常用的三種方式:使用 PID、使用程序名稱、使用 htop 互動介面

在動手之前,建議先了解Linux訊號機制


Linux 訊號(Signal)說明

訊號名稱	數值	說明

TERM (15)	15	正常終止(預設,程序有機會清理後退出)

HUP (1)		1	重新載入設定檔(不停止程序,常用於 nginx / sshd)

INT (2)		2	中斷程序(等同 Ctrl+C)

KILL (9)		9	強制終止(無法被忽略,最後手段)

STOP (19)	19	暫停程序(程序仍在記憶體中,可用 CONT 恢復)

CONT (18)	18	繼續已暫停的程序

USR1 (10)	10	用戶自定義訊號(許多程序用於重開日誌)

USR2 (12)	12	用戶自定義訊號(依程式而定)




警告

kill -9 (SIGKILL) 是最後手段

SIGKILL 強制由核心終止進程,程序無法進行任何清理動作,可能造成資料遺失、鎖定檔未釋放、資料庫損毀

請優先使用 SIGTERM (kill -15 或直接 kill),給程序機會優雅地關閉



方法一:使用 PID

正常終止(預設,等同 kill -15 或 kill -TERM)
kill PID


強制終止(最後手段)
kill -9 PID
 

重新載入設定(不停止服務,常用於 nginx、sshd)
kill -HUP PID
 

終止多個 PID
kill 1234 5678 9012






方法二:使用程序名稱

pkill:依名稱模糊匹配(部分符合即可)
pkill nginx
 

匹配完整指令(包含參數)
pkill -f 'python script.py'
 

只終止特定用戶的程序
pkill -u username nginx


killall:完全匹配名稱
killall nginx

killall -9 nginx


注意

pkill 和 killall 的差別:pkill 使用正規表達式(regex)進行模糊匹配;killall 需要完全符合程序名稱

使用 pkill -f 可以匹配完整指令列,當程序名稱相同但啟動參數不同時很有用




方法三:使用 htop 互動介面

在清單中選取目標進程後,按 F9 選擇訊號類型
htop



-------------------------
安全終止的最佳實務
-------------------------

建議按以下順序嘗試

1.優先使用服務管理工具(自動處理依賴關係)
systemctl stop nginx


2.使用正常終止,讓程序自行清理
kill PID


3.等待幾秒後確認(若程序仍存在再考慮下一步)
ps -p PID



4.最後才用強制終止
kill -9 PID






-----------------------
進階應用與實用技巧
-----------------------

即時監控特定程序

使用 watch 搭配 ps
watch -n 1 'ps aux | grep nginx'

每秒更新一次,適合快速監控服務狀態


使用 top 過濾特定進程
top -p $(pgrep -d',' nginx)

僅顯示指定的PID



自訂監控腳本 (適合嵌入日誌)
while true; do
    clear
    echo "=== $(date) ==="
    ps aux --sort=-%cpu | head -20
    sleep 2
done


查詢 /proc 目錄 (進階分析)

/proc 是虛擬檔案系統,內含每個進程的執行狀態:

查看執行檔路徑
ls -l /proc/PID/exe

查看開啟的檔案
ls -l /proc/PID/fd

查看環境變數
cat /proc/PID/environ | tr '\0' '\n'

查看記憶體映射
cat /proc/PID/maps

查看詳細統計
cat /proc/PID/status



資源排序快速指令

前10名CPU使用率
ps aux --sort=-%cpu | head -11

前10名記憶體使用率
ps aux --sort=-%mem | head -11

前10名累積CPU時間
ps aux --sort=-time | head -11





使用 pgrep 依名稱取得PID

pgrep 是搜尋進程 PID 的專用工具,比 ps aux | grep 更簡潔:

取得nginx的所有PID
pgrep nginx


顯示PID和進程名稱
pgrep -la nginx


只匹配精確名稱 (非子字串)
pgrep -x nginx


搭配 top 使用
top -p $(pgrep -d',' nginx)





----------------------------
btop 現代化圖形化監控
----------------------------

btop 是比 htop 更現代化的互動式系統監控工具,提供圖形化的CPU、記憶體、網路、磁碟使用率圖表,以及可自訂主題的美觀介面

Debian 13 的官方倉庫已收錄 btop



安裝 btop
apt install btop


使用 btop
btop


btop 特色
圖形化 CPU、記憶體、網路、磁碟的即時折線圖
滑鼠支援,可點擊操作
可自訂顏色主題(按 ESC 進入選單)
進程樹狀顯示
可篩選進程、依各種欄位排序
顯示網路介面流量(上傳/下載速率)
顯示磁碟讀寫速率



注意

若系統資源有限,btop 的資源消耗比 htop 略高

在嵌入式系統或極低效能環境中,建議仍使用 top 或 htop





-------------------------
除錯流程建議 (維運篇)
-------------------------

當系統異常時,建議依序排查:

1. 快速檢視整體狀況
htop

或 top,按 1 查看各核心使用率



2. 找出耗用資源的進程
ps aux --sort=-%cpu | head -11

ps aux --sort=-%mem | head -11



在 htop 中可按 F6 排序,或按 P (CPU)、M (記憶體)




3. 深入分析特定進程

完整進程資訊
ps -fp PID


查看執行檔路徑 (確認是哪個程式)
ls -l /proc/PID/exe


查看開啟的檔案 (找出可能的 I/O 來源)
ls -l /proc/PID/fd



查看環境變數 (確認配置是否正確)
cat /proc/PID/environ | tr '\0' '\n'


查看執行緒數量
ps -L -p PID | wc -l




4. 檢查服務狀態

查看服務狀態 (含最近日誌)
systemctl status nginx


即時查看服務日誌
journalctl -u nginx -f


查看服務最近 50 行日誌
journalctl -u nginx -n 50


5. 檢查系統日誌

系統日誌
tail -f /var/log/syslog


核心訊息 (驅動程式錯誤、OOM killer 等)
dmesg | tail -20

含時間戳的錯誤訊息
dmesg -T | grep -i error


6. 決定處理方式

正常但資源過高:調整參數或重啟服務

異常來源不明:先記錄再終止,並找出根源

疑似惡意程式:隔離網路後分析,必要時重建系統







------------------
常見問題與排解
------------------

Q1: CPU滿載但找不到高CPU進程


可能原因:
Kernel thread (核心執行緒)
I/O wait (I/O 等待)
中斷處理 (IRQ)
隱藏程序 (rootkit)



檢查方法:

在 top 中按 1 查看各核心使用率,觀察 wa 值是否過高 (I/O 等待問題)
top


查看 I/O 統計 (需安裝 iotop)
apt install iotop

iotop -o



查看中斷分佈
cat /proc/interrupts


查看核心執行緒,以方括號表示
ps aux | grep '\['


使用 perf 分析 CPU 熱點
apt install linux-perf

perf top





Q2: 記憶體不足但找不到高記憶體進程


可能原因:

快取佔用 (正常現象)

核心記憶體洩漏

共享記憶體未釋放



檢查方法:

查看記憶體詳細資訊
free -h

cat /proc/meminfo


查看核心資料結構記憶體
slabtop


查看共享記憶體
ipcs -m


查看 OOM 紀錄
journalctl -k | grep -i 'oom\|killed'


注意:free -h 中的 available 才是真正可用記憶體,free 欄位小不代表記憶體不足。Linux 會積極使用空閒記憶體作為快取





Q3: 殭屍進程過多


可能原因:

父進程未正確回收子進程(wait() 呼叫缺失)

程式設計錯誤



檢查與處理:

找出殭屍進程
ps aux | awk '$8=="Z"'


查看父進程
ps -fp PPID


嘗試重啟父進程
systemctl restart 服務名稱


注意:少量殭屍(1~2 個)為暫時現象,大量才需處理。殭屍僅佔用 PID,不佔 CPU/記憶體,只有當 PID 耗盡時才會影響系統。若無法清除,最後手段是重開機








Q4: 無法終止進程


可能原因:

程序處於不可中斷睡眠狀態(D state)

權限不足

核心執行緒



解決方法:

確認進程狀態
ps aux | grep PID


依序嘗試

正常終止
kill -15 PID


sleep 5

強制終止
kill -9 PID


警告:D 狀態進程無法被任何訊號終止,因為它正在等待核心 I/O 操作完成。這通常是 NFS 掛載失去連線、磁碟錯誤或驅動程式問題造成的,需要解決底層問題才能恢復




Q5: 使用 top/htop 時CPU百分比超過100%

這是多核心系統的正常現象。%CPU 欄位顯示的是「使用的 CPU 核心數的百分比」,在 4 核心系統中,單一進程最大可顯示 400%


在 top 中按 1 可切換為顯示各核心個別使用率

htop 預設即顯示各核心的條狀圖








-----------------------
安全與最佳實務建議
-----------------------

日常維運建議

1.安裝必要的監控工具
apt install htop lsof iotop btop


2.設定每日自動進程報告(cron)

編輯 crontab
crontab -e


加入以下行(每天早上 9 點發送報告)
0 9 * * * ps aux --sort=-%cpu | head -20 | mail -s "Daily Process Report" admin@example.com



3.設定使用者進程數量限制(防止 fork bomb)

# /etc/security/limits.conf
username soft nproc 100
username hard nproc 200






------------------
安全注意事項
------------------

1.不要隨意終止系統進程:特別是 systemd、kthreadd、kworker 等核心執行緒



2.生產環境操作原則:先確認,再行動;優先使用 systemctl 管理服務;必要時先備份設定檔;記錄操作步驟



3.權限管理:避免以 root 執行不明程序;定期檢查異常權限的程序(SUID 位元);使用 sudo 限制權限



4.定期檢查:使用 ps aux 或 top 定期檢視有無不明進程;注意名稱偽裝的惡意進程 (如偽裝成系統服務)





-----------------
效能優化建議
-----------------

1.調整 Nice 值 (影響CPU排程優先級)

降低背景任務優先級 (正值 = 低優先)
renice +10 -p PID

提高重要服務優先級 (需 root,負值 = 高優先)
renice -5 -p PID

啟動時就設定 nice 值
nice -n 10 command



2.設定CPU親和性 (綁定程序到特定CPU核心)

將 PID 綁定到 CPU 0 和 1
taskset -c 0,1 -p PID

啟動時就綁定
taskset -c 0 command



3.使用 cgroups 限制資源 (透過 systemd)

以限制的資源啟動指令 (CPU 最多 50%,記憶體最多 1G)
systemd-run --scope -p CPUQuota=50% -p MemoryMax=1G command


建議:在 Debian 13 中,systemd 已整合 cgroups v2,可以透過 systemctl set-property 命令為服務設定資源限制,這是現代Linux系統推薦的資源控制方式



----------------------
學習資源與延伸閱讀
----------------------

man 手冊頁

ps 完整文件
man ps

top 完整文件
man top

htop 完整文件
man htop

kill 訊號說明
man kill

Linux訊號完整列表
man signal

/proc 虛擬檔案系統說明
man proc




系統文件

/usr/share/doc/ 目錄下各工具的完整說明文件


/proc 目錄:每個子目錄對應一個進程,包含進程的所有狀態資訊





延伸工具

strace:追蹤進程的系統呼叫 (system call),適合深入除錯

ltrace:追蹤進程的函式庫呼叫 (library call)

perf:Linux效能分析工具,支援CPU熱點分析、效能計數器

valgrind:記憶體洩漏與錯誤偵測工具 (主要用於開發階段)

atop:類似 top 但支援記錄歷史數據,可回溯分析




進階監控系統

Prometheus + Grafana:企業級指標收集與視覺化平台

Netdata:即時效能監控,安裝簡單,介面直觀

Zabbix / Nagios:傳統企業監控解決方案,支援告警通知

Create an account or sign in to comment

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.