Для всех зарегистрированных в данный момент в системе процессов вывести в один файл строки
ProcessID=PID : Parent_ProcessID=PPID : Average_Sleeping_Time=SleepAVG.
Значения PPid и SleepAVG взять из файлов status, которые находятся в директориях с названиями, соответствующими PID процессов в /proc . Отсортировать эти строки по идентификаторам родительских процессов.
PPID и SleepAVG не выводятся.
Возможно, проблема в том, что лаба рассчитана на CentOS, а делаю я в Ubuntu. Ну и PPID и SleepAVG тогда где находятся?
Ну PPID возможно стоит вытащить из proc/$pid/stat ? А вот SleepAVG я не нашел, хотя может просто невнимательно искал.
#! /bin/bash
filename="job5.tmp"
status=""
for pid in $(ps -A -o pid | tail -n +2)
do
file="/proc/"$pid"/status"
ppid=$(grep -E -h -s -i "ppid:\s+(.+)" $file | sed -E "s/.+([0-9]+).*/\1/")
sleepavg=$(grep -E -h -s -i "sleepavg:\s+(.+)" $file | sed -E "s/.+([0-9]+).*/\1/")
if [ -z $sleepavg ]; then
sleepavg=0
fi
if [ -z $ppid ]; then
status=$status"ProcessID="$pid" : Parent_ProcessID="$ppid" : Average_Sleeping_Time="$sleepavg$'\n'
fi
done
echo "$status" | sort -t " " -k3 > $filename
cat $filename
exit 1
Примечание:
SleepAVG оказался в /proc/$pid/sched полем avg_atom. А PPID нужно искать таки в /proc/$pid/status . Теперь вроде верно. Такие дела.
Вот код, на случай, если кому понадобится:
#!/bin/bash
filename="job5.tmp"
status=""
for pid in $(ps -A -o pid | tail -n +2)
do
#pid=$(grep -E -h -s -i "ppid:\s+(.+)" /proc/"$pid"/status | sed -E "s/.+([0-9]+).*/\1/")
ppid=$(grep -E -h -s -i "ppid" /proc/"$pid"/status | grep -E -o "[0-9\.]+")
sleepavg=$(grep -E -h -s -i "avg_atom" /proc/"$pid"/sched | grep -E -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 " " -k3 > $filename
cat $filename
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.