Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 進程管理深度補充:kill 信號詳解、僵屍/孤兒進程處理、top 進階與前後台作業控制

編輯:Linux 系統常見問題解答

承接進程管理核心體系,本文深入 kill 信號語義、僵屍/孤兒進程產生與清理機制、top 互動熱鍵、jobs/fg/bg 作業控制,並提供實戰排查腳本。

一、kill 信號完整語義表

信號編號名稱預設動作可捕獲典型用途
SIGHUP1Hang UpTermYDaemon 重載配置
SIGINT2InterruptTermYCtrl+C 終止前台
SIGQUIT3QuitCore+TermYCtrl+\ 產生 core
SIGILL4Illegal InstrCore+TermY二進制損壞
SIGTRAP5Trace TrapCore+TermYDebugger 斷點
SIGABRT6AbortCore+TermYabort()、assert 失敗
SIGBUS7Bus ErrorCore+TermY記憶體對齊錯誤
SIGFPE8Float ExceptionCore+TermY除零、溢位
SIGKILL9KillTermN**最後手段,不可捕獲**
SIGUSR110User 1TermY自定義(如重開日誌)
SIGSEGV11Seg FaultCore+TermY記憶體非法訪問
SIGUSR212User 2TermY自定義
SIGPIPE13Broken PipeTermY寫無讀端管道
SIGALRM14AlarmTermYalarm() 定時器
SIGTERM15TerminateTermY優雅關閉(systemd 預設)
SIGSTKFLT16Stack FaultTermY协處理器錯誤
SIGCHLD17Child StatusIgnY子進程退出/停止
SIGCONT18ContinueContY恢復 SIGSTOP
SIGSTOP19StopStopN**不可捕獲,強制暫停**
SIGTSTP20Terminal StopStopYCtrl+Z
SIGTTIN21TTY InStopY後台讀終端
SIGTTOU22TTY OutStopY後台寫終端
SIGURG23Urgent DataIgnYSocket OOB 資料
SIGXCPU24CPU LimitCore+TermY超過 CPU 時間限制
SIGXFSZ25File Size LimitCore+TermY超過檔案大小限制
SIGVTALRM26Virtual AlarmTermY虛擬時間定時器
SIGPROF27Profile AlarmTermY剖析定時器
SIGWINCH28Window ChangeIgnY終端視窗大小變化
SIGIO29I/O PossibleTermY非同步 I/O 就緒
SIGPWR30Power FailTermY電源異常
SIGSYS31Bad SyscallCore+TermY非法系統呼叫

二、僵屍與孤兒進程:產生、危害、清理

僵屍進程

  • 產生:子進程 exit(),父進程未 wait()/waitpid() 回收退出碼
  • 特徵:ps 顯示 Z、佔用 PID、task_struct 殘留、不佔 CPU/記憶體
  • 危害:大量僵屍耗盡 /proc/sys/kernel/pid_max(預設 32768),導致無法建新進程
  • 清理:
    1. 修復父進程:註冊 SIGCHLD handler + waitpid(-1, NULL, WNOHANG)
    2. 殺父進程 → 變孤兒 → init (PID 1) 收養 → init 定期 wait() 清理
    3. 系統層面:echo 1 > /proc/sys/kernel/ns_last_pid 無效,需重啟或修復代碼

孤兒進程

  • 產生:父進程先退出,子進程仍在運行
  • 歸屬:由 init (PID 1) 或 systemd (PID 1) 收養,getppid() 返回 1
  • 影響:通常無害,守護進程常見(雙重 fork 脫離終端)

三、top 進階互動熱鍵

鍵功能記憶口訣
P按 %CPU 排序Processor
M按 %MEM 排序Memory
T按 TIME+ 排序Time
1切換顯示各 CPU 核心1 core
H切換顯示執行緒Threads
c切換完整命令列Command
u篩選用戶User
k殺進程(輸入 PID、信號)Kill
r改 nice 值Renice
d改刷新間隔Delay
W寫入配置 ~/.toprcWrite
q退出Quit

四、前後台作業控制

# 啟動前台任務
sleep 100
# Ctrl+Z → 暫停並放入後台 [1]+ Stopped sleep 100

# 後台繼續
bg %1
# [1]+ sleep 100 &

# 查看作業
jobs -l
# [1]+ 12345 Running sleep 100 &

# 切回前台
fg %1
# sleep 100

# 直接後台啟動
sleep 100 &
# [1] 12345

# 終止作業
kill %1
# 或
kill 12345

五、實戰排查腳本

#!/bin/bash
# proc_diag.sh — 進程健康快照
set -euo pipefail

echo "=== $(date) Process Diagnostics ==="

# 1. 僵屍進程
zombies=$(ps -eo stat,ppid,pid,cmd | awk '$1~/^Z/ {print $2, $3, $4}')
if [ -n "$zombies" ]; then
  echo "⚠ ZOMBIES FOUND:"
  echo "$zombies"
  echo "Parent PIDs to fix: $(echo "$zombies" | awk '{print $1}' | sort -u)"
else
  echo "✓ No zombies"
fi

# 2. D 狀態進程
dstate=$(ps -eo stat,pid,cmd | awk '$1~/^D/ {print $2, $3}')
if [ -n "$dstate" ]; then
  echo "⚠ D STATE (uninterruptible sleep):"
  echo "$dstate"
  for pid in $(echo "$dstate" | awk '{print $1}'); do
    echo "  Stack for $pid:"
    cat /proc/$pid/stack 2>/dev/null | head -5
  done
else
  echo "✓ No D state processes"
fi

# 3. 高 CPU 進程
echo "Top 5 CPU:"
ps -eo pcpu,pid,user,cmd --sort=-pcpu | head -6

# 4. 高記憶體進程
echo "Top 5 MEM:"
ps -eo pmem,pid,user,cmd --sort=-pmem | head -6

# 5. 開啟檔案數最多進程
echo "Top 5 open files:"
for pid in $(ps -eo pid | tail -n +2); do
  cnt=$(ls -1 /proc/$pid/fd 2>/dev/null | wc -l)
  echo "$cnt $pid"
done | sort -rn | head -5

echo "=== Done ==="

結語: 信號是進程的「神經系統」,僵屍是「未完成的告別」,top 是「動態 MRI」,作業控制是「Shell 的任務管理器」。把這些串起來,你就能在幾分鐘內完成從「現象」到「根因」到「修復」的閉環。

Copyright © Windows教程網 All Rights Reserved