#!/usr/bin/env bash
# check_swap.sh：查看各进程的 Swap 占用排行（只读）
set -u

printf '%-10s %-24s %12s\n' 'PID' 'PROCESS' 'SWAP(MB)'

for dir in /proc/[0-9]*; do
    pid=${dir##*/}
    status="$dir/status"
    [[ -r "$status" ]] || continue

    kb=$(awk '/^VmSwap:/ {print $2; exit}' "$status" 2>/dev/null) || continue
    [[ "$kb" =~ ^[0-9]+$ ]] || continue
    (( kb > 0 )) || continue

    name=$(cat "$dir/comm" 2>/dev/null) || name='unknown'
    mb=$(awk -v x="$kb" 'BEGIN {printf "%.1f", x/1024}')
    printf '%-10s %-24.24s %12s\n' "$pid" "$name" "$mb"
done | sort -k3,3nr | head -n 20
