Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 3 / Лабораторная работа 3

.doc
Скачиваний:
425
Добавлен:
25.02.2015
Размер:
32.77 Кб
Скачать

Лабораторная работа №3. Мониторинг процессов в ОС Linux

1. Посчитать количество процессов, запущенных пользователем user, и вывести в файл пары PID:команда для таких процессов.

#!/bin/bash

ps -U user -o pid,command | tail -n +2 | sed -r "s/\s*([0-9]+)\s(.+)$/\1:\2/" > ans1.tmp

2. Вывести на экран PID процесса, запущенного последним (с последним временем запуска).

#!/bin/bash

ps -Ao pid,stime | tail -n +2 | sort -r -k2 | head -9 | sort -k2 | head -1 | awk '{print $1}'

3. Вывести в файл список PID всех процессов, которые были запущены командами, расположенными в /sbin/

#!/bin/bash

for i in $(ls /proc/ | grep "[0-9]\+")

do

echo $i | readlink /proc/$i/exe | grep "/sbin" | echo $i >> ans3.tmp

done

4. Для каждого процесса посчитать разность резидентной и разделяемой части памяти процесса (в страницах). Вывести в файл строки вида PID: разность, отсортированные по убыванию этой разности.

#!/bin/bash

ps -A -o pid | tail -n +2 | gawk '{file1="/proc/"$1"/statm"; getline f<file1; close (file1); split(f, a); print $1, ":", a[2]-a[3]}' | tr -d " " | sort -r -n -t ":" -k2 > ans4.tmp

5. Для всех зарегистрированных в данный момент в системе процессов выведите в один файл строки ProcessID=PID: Parent_ProcessID=PPID: Average_Sleeping_Time=SleepAVG. Значения PPid и SleepAVG возьмите из файлов status, которые находятся в директориях с названиями, соответствующими PID процессов в /рrос . Отсортируйте эти строки по идентификаторам родительских процессов.

#!/bin/bash

status=""

for pid in $(ps -A -o pid | tail -n +2)

do

file="/proc/"$pid"/status"

file1="/proc/"$pid"/sched"

ppid=$(grep -E -h -s -i "ppid:\s(.+)" $file | grep -o "[0-9]\+")

sleepavg=$(grep -E -h -s -i "avg_atom(.+)" $file1 | grep -o "[0-9.]\+")

if [[ -z $sleepavg ]]

then sleepavg=0

fi

if [[ $ppid != "" ]]

then status=$status"ProcessID="$pid" : Parent_ProcessID="$ppid" : Average_Sleeping_Time="$sleepavg$'\n'

fi

done

echo "$status" | sort -t " " -k2 > ans5.tmp

6. В полученном на предыдущем шаге файле после каждой группы записей с одинаковым идентификатором родительского процесса вставить строку вида Average_Sleeping_Children_of_ParentID=N is М, где N = PPID, а М - среднее, посчитанное из SleepAVG для данного процесса.

#!/bin/bash

ppid=0

sleepavg=0

count=0

b=""

while read a

do

if [[ -n $a ]]

then

newppid=$(echo $a | grep -E -h -s -i -o "Parent_ProcessID=[0-9]+" | grep -o "[0-9]\+")

newsleepavg=$(echo $a | grep -E -h -s -i -o "Average_Sleeping_Time=[0-9.]+" | grep -o "[0-9.]\+" | awk '{printf("%s",$1)}')

if [[ $ppid == $newppid ]]

then sleepavg=$(echo "$sleepavg+$newsleepavg" | bc -l -q)

count=$(echo "$count+1" | bc -l -q)

else

sleepavg=$(echo "$sleepavg/$count" | bc -l -q)

if [[ -n $b ]]

then

b=$b"Average_Sleeping_Children_of_ParentID="$ppid" is "$sleepavg$'\n'

fi

sleepavg=$newsleepavg

ppid=$newppid

count=1

fi

b=$b$a$'\n'

fi

done < ans5.tmp

sleepavg=$(echo "$sleepavg/$count" | bc -l -q)

if [[ -n $b ]]

then

b=$b"Average_Sleeping_Children_of_ParentID="$ppid" is "$sleepavg$'\n'

fi

echo "$b" > ans6.tmp

Соседние файлы в папке Лабораторная работа 3