跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

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

精选回复

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:傳統企業監控解決方案,支援告警通知

创建帐户或登录后发表意见

帐户

导航

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。