#!/bin/bash
for proc_dir in /proc/*
do
if [ -d "$proc_dir" ]
then
pid=$(basename "$proc_dir")
if [[ $pid =~ ^-?[0-9]+$ ]]
then
if grep -q "VmSwap" $proc_dir/status
then
swap_usage_nums=$(cat $proc_dir/status | grep VmSwap | awk '{ print $2 }')
if (( swap_usage_nums > 0 ))
then
swap_usage_unit=$(cat $proc_dir/status | grep VmSwap | awk '{ print $3 }')
cmdline=$(cat $proc_dir/cmdline | sed -e "s/\x00/ /g";)
echo "${swap_usage_nums}${swap_usage_unit} $cmdline"
fi
fi
fi
fi
done | sort -h -r
#Ищем все процессы у которых значение swap не начинается с 0, следовательно не пустое
grep -HP "VmSwap:[ \t]+[1-9]" /proc/[0-9]*/status
更远
#Форматируем вывод, удаляя не нужные данные с помощью sed, группу замены рассмотрим отдельно
sed -r 's/(.*)status:VmSwap:[ \t]+([^\t ]+)[ \t]+([a-zA-Z]+)/.../g'
#Группа замены: "делаем форматированным вывод, что бы избежать явного цикла,
#просто подготавливаем команды для передачи интерпретатору, подставляя для каждого
printf "%-20s | %s\n" "size: \2\3" "command: `cat \1cmdline`"
更远
#Передаем в интерпретатор подготовленные команды и получаем нужный результат
#отсортированный по максимальному значению используемой памяти в swap разделе.
/bin/bash |\
sort -t':' -k '2,2' -nr
脚本:
工作示例:
可能的变化将在这里
您的脚本有效,但它可以更短且没有 bashisms:
现在更详细地说:
更远
更远
执行时间测量:
第一个建议选项 - 真实 0m4.828s
第二个建议选项 - 真实 0m1.268s
我的选项 - 真实 0m0.122s