Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 進程管理完全指南:ps、top、kill、pgrep、pkill、優先級調度與系統監控實戰

編輯:Linux 教學

核心概念:程序 vs 進程

  • 程序:靜態的可執行文件(如 /usr/sbin/httpd、/bin/bash),佔用磁碟空間。
  • 進程:程序的動態執行實例,擁有獨立的虛擬地址空間、PID、資源描述符、安全上下文。一個程序可啟動多個進程(如 Apache Prefork MPM)。

進程分類

類型特徵典型例子
交互進程終端啟動、需用戶輸入、前台運行bash、vim、top、mysql client
批處理進程非交互、排隊執行、通常腳本/定時任務cron job、backup script、編譯構建
守護進程後台長期運行、無控制終端、系統啟動自動拉起systemd、sshd、httpd、mysqld、crond

進程關鍵屬性(ps 輸出欄位)

屬性含義查看命令
PID進程 ID,唯一標識ps -eo pid
PPID父進程 IDps -eo ppid
UID/EUID真實/有效用戶 ID(權限依據)ps -eo uid,euid
GID/EGID真實/有效組 IDps -eo gid,egid
STAT狀態:R(運行)、S(可中斷睡眠)、D(不可中斷睡眠/IO)、Z(殭屍)、T(停止)、<(高優先級)、N(低優先級)、l(多線程)、+(前台組)ps -eo stat
NINice 值(-20~19,越小優先級越高)ps -eo ni
PRI內核調度優先級(實時優先級 0-99,普通 100-139)ps -eo pri
%CPUCPU 使用率(採樣週期內佔用)ps -eo pcpu
%MEM物理記憶體佔用率ps -eo pmem
VSZ虛擬記憶體大小 (KB)ps -eo vsz
RSS常駐集大小 (KB),實際物理記憶體佔用ps -eo rss
TTY控制終端(? 表示無)ps -eo tty
COMMAND啟動命令及參數ps -eo cmd

ps 實戰:最常用組合

# 全量詳盡(標準輸出)
ps -eo pid,ppid,user,group,pcpu,pmem,vsz,rss,stat,ni,pri,tty,time,cmd --sort=-pcpu | head -20

# 樹狀顯示父子關係
ps -ef --forest | grep nginx
ps auxf | grep httpd

# 按用戶過濾
ps -u www-data -o pid,pcpu,pmem,cmd

# 線程級視圖(LWP = 線程 ID)
ps -eLf | grep java
ps -T -p   # 查看指定進程所有線程

pgrep / pkill:按名稱查找/殺死進程

命令用途常用參數範例
pgrep查詢 PID-l 顯示名稱、-f 匹配完整命令行、-u 指定用戶、-P 父 PID、-o/-n 最老/最新pgrep -lf nginx
pgrep -u www -f php-fpm
pkill發送信號殺死參數同 pgrep、-SIGNAL 指定信號(預設 TERM)pkill -9 -f "java.*myapp"
pkill -HUP nginx
killall按進程名殺死所有-u 用戶、-r 正則、-w 等待結束killall -u www php-fpm

kill 信號大全:優雅關閉 vs 強制終止

信號數值行為典型用途可捕獲/阻塞/忽略
SIGHUP1掛起/重載配置Nginx/Apache 熱重載、終端斷開通知可捕獲
SIGINT2中斷Ctrl+C、前台程序優雅退出可捕獲
SIGQUIT3退出並 Core DumpCtrl+\、調試生成 core 文件可捕獲
SIGKILL9強制終止(內核直接回收)僵屍進程、失控進程、最後手段不可捕獲/阻塞/忽略
SIGTERM15優雅終止(預設)systemctl stop、服務管理標準信號可捕獲
SIGUSR1/210/12用戶自定義Nginx 重開日誌 (USR1)、平滑升級 (USR2)可捕獲
SIGCHLD17子進程結束通知父進程父進程 wait() 回收僵屍可捕獲
SIGSTOP19暫停執行Ctrl+Z、調試凍結進程不可捕獲/阻塞/忽略
SIGCONT18繼續執行fg/bg 恢復暫停進程可捕獲

top / htop / glances:動態監控

top 關鍵交互鍵

鍵功能
M按記憶體佔用排序(佔用大→小)
P按 CPU 佔用排序(預設)
T按累積 CPU 時間排序
N按 PID 排序
c切換顯示完整命令行
k殺死進程(輸入 PID + 信號)
r重設 Nice 值(輸入 PID + 新值)
d修改刷新間隔(秒)
1切換顯示所有 CPU 核心佔用
h幫助
q退出

htop:彩色、滾動、滑鼠支援、樹狀視圖、更直觀。
glances:Python 寫、跨平台、Web 模式、REST API、容器/GPU/磁碟/網路全維度。

進程優先級:nice 與 renice

# 啟動時指定 nice 值(-20 最高,19 最低,預設 0)
nice -n -5 ./my_high_priority_task &   # 需 root 權限設負值
nice -n 10 ./my_low_priority_task &    # 普通用戶只能增大 nice

# 調整運行中進程優先級
renice -n -10 -p 12345    # 提高優先級(需 root)
renice -n 5 -p 12345      # 降低優先級

# top 中按 r 鍵互動式 renice

現代替代:systemd-run --scope -p CPUWeight=200 ./task(cgroups v2 CPU 權重)、cpulimit -l 50 -p 12345(限制 CPU 使用率百分比)。

systemd 服務管理(現代標準)

操作命令說明
啟動/停止/重啟systemctl start|stop|restart nginx替代 service
啟用/禁用開機自啟systemctl enable|disable nginx替代 chkconfig
查看狀態/日誌systemctl status nginx
journalctl -u nginx -f
含 PID、CGroup、最近日誌
重載配置systemctl reload nginx發送 SIGHUP
查看依賴樹systemctl list-dependencies nginx啟動順序分析
編輯單元檔systemctl edit nginx生成 drop-in 覆蓋,不修改原檔

常見故障排查清單

  1. 高 CPU:top -Hp 定位熱線程 → perf top -p 定位熱函數 → gdb -p 打斷點/回溯。
  2. 高記憶體:pmap -x 看映射區域 → cat /proc//smaps | grep -A 20 "Heap\|Stack\|anon" → valgrind --tool=massif 或 heaptrack 剖析。
  3. 僵屍進程:ps -eo stat,ppid,pid,cmd | grep ^Z 找父進程 → 修復父進程 wait() 或重啟父進程。
  4. D 狀態不可中斷睡眠:通常為磁碟 IO 等待 → iostat -x 1、iotop 定位磁碟壓力 → 檢查 NFS/雲盤掛載、磁碟故障。
  5. FD 洩漏:lsof -p | wc -l → ls -l /proc//fd/ 找未關閉文件/套接字 → 代碼審查 close()/fclose() 缺失。

總結

Linux 進程管理的核心技能鏈:ps 靜態快照 → top/htop 動態觀測 → pgrep/pkill/kill 精準控制 → nice/renice/cgroups 優先級治理 → systemd 服務生命週期管理 → 故障現象定位到代碼行。熟練掌握這套工具鏈,配合 /proc 文件系統深度洞察,是 Linux 運維與後端開發的基本功。

Copyright © Windows教程網 All Rights Reserved