Помогите исправить ошибку в bash-скрипте

программирование Linux ubuntu bash centos

Для всех зарегистрированных в данный момент в системе процессов вывести в один файл строки
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
Ответы:
А что за параметр SleepAVG? Через ps его можно найти? Что бы как-то так:
ps -e -o ppid,pid,user,sched,comm --sort ppid > filename
В одну строку:
ps aux | awk '{print $1" "$11}' | sort | uniq -u


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.