#进程使用tcp连接统计
#! /bin/bash
ss -tnp > .ss.tmp
range=$1
start_pid=$(echo $range | cut -d'-' -f1)
end_pid=$(echo $range | cut -d'-' -f2)
# 输出表头
printf "%-8s %-10s %-10s %-10s %-12s %-12s %-12s %-8s %-12s %-10s %-10s %-10s\n" \
"PID" "ESTAB" "SYN-SENT" "SYN-RECV" "FIN-WAIT-1" "FIN-WAIT-2" "TIME-WAIT" "CLOSE" "CLOSE-WAIT" "LAST-ACK" "LISTEN" "CLOSING"
for ((pid=start_pid; pid<=end_pid; pid++)); do
# 统计各种状态数量
awk -v pid="$pid" '
$0 ~ pid { state[$1]++ }
END {
printf "%-8s %-10d %-10d %-10d %-12d %-12d %-12d %-8d %-12d %-10d %-10d %-10d\n", \
pid, state["ESTAB"], state["SYN-SENT"], state["SYN-RECV"], state["FIN-WAIT-1"], state["FIN-WAIT-2"], \
state["TIME-WAIT"], state["CLOSE"], state["CLOSE-WAIT"], state["LAST-ACK"], state["LISTEN"], state["CLOSING"]
}
' .ss.tmp
done
rm -rf .ss.tmp