Загрузить файлы в «/»
This commit is contained in:
59
myps.sh
Normal file
59
myps.sh
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/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
|
||||||
Reference in New Issue
Block a user