59 lines
2.4 KiB
Bash
59 lines
2.4 KiB
Bash
#!/bin/bash
|
||
|
||
|
||
# Выводим заголовок
|
||
printf "%-20s %-10s %-10s %-10s %-10s %-10s %s\n" "User" "PID" "PPID" "CPU_Time" "Memory" "Status" "Command"
|
||
echo "------------------------------------------------------------------------------------------"
|
||
|
||
# Проходим по всем PID в /proc
|
||
for pid in /proc/[0-9]*/; do
|
||
pid=$(basename "$pid")
|
||
|
||
#читаем информацию о процессе
|
||
if [[ -f "/proc/$pid/status" ]]
|
||
then
|
||
#Ищем имя пользователя, от имени которого запущен процесс
|
||
userName=$(id -un "$(grep '^Uid:' "/proc/$pid/status" | awk '{print $2}')")
|
||
|
||
#Получаем роодителя
|
||
ppid=$(grep '^PPid:' "/proc/$pid/status" | awk '{print $2}')
|
||
|
||
#Статус процесса
|
||
status=$(grep '^State:' "/proc/$pid/status" | awk '{print $2}' | cut -c1)
|
||
|
||
#Время использования CPU
|
||
cpuTimeSeconds=$(userTime=$(cat /proc/$pid/stat | awk '{print $14}'); systemTime=$(cat /proc/$pid/stat | awk '{print $15}'); echo "$(( (userTime + systemTime) / 100))")
|
||
#Переводим в формат М:С
|
||
cpuTime=$(date -u -d "@$cpuTimeSeconds" +"%M:%S")
|
||
|
||
# Получаем использование памяти
|
||
memUsage=$(cat /proc/$pid/status| grep VmRSS | awk '{print $2}')
|
||
if [[ -z "$memUsage" ]]; then
|
||
memUsage="0"
|
||
fi
|
||
|
||
#берем командную строку
|
||
cmdLine=""
|
||
if [[ -f "/proc/$pid/cmdline" ]]; then
|
||
# Читаем cmdLine, заменяем нулевые байты на пробелы
|
||
cmdLine=$(tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null | sed 's/ $//')
|
||
|
||
fi
|
||
|
||
#Если командная строка пустая, берем имя процесса
|
||
if [[ -z "$cmdLine" ]]
|
||
then
|
||
cmdLine="[$(grep '^Name:' "/proc/$pid/status" | awk '{print $2}')]"
|
||
fi
|
||
|
||
#Укорачиваем до 50 символов
|
||
if [[ ${#cmdLine} -gt 50 ]]
|
||
then
|
||
cmdLine="${cmdLine:0:47}..."
|
||
fi
|
||
|
||
# Выводим информацию
|
||
printf "%-20s %-10s %-10s %-10s %-10s %-10s %s\n" \
|
||
"$userName" "$pid" "$ppid" "$cpuTime" "$memUsage" "$status" "$cmdLine"
|
||
fi
|
||
done | sort -n -k2 # Сортируем по PID |