инициируемая и закрытая или завершенная проверка процесса

Я обращаюсь к управляющим процессам, которые инициируются или закрываются пользователем или системой в сценарии удара. Там какой-либо путь состоит в том, чтобы проверить, какой процесс инициируется теперь и для закрытого процесса, что этот процесс закрывается теперь?

#!/bin/bash

while true
do
OUTPUT="$(ps aux | wc -l)"
echo "First ${OUTPUT}"
sleep 5
OUTPUT1="$(ps aux | wc -l)"
#echo "Second ${OUTPUT1}"

#if [ "${OUTPUT}" == "${OUTPUT1}" ]; then
#echo "procesess same"

if [ "${OUTPUT}" -lt "${OUTPUT1}" ]; then
echo "procesess Increased"

elif [ "${OUTPUT}" -gt "${OUTPUT1}" ]; then
echo "procesess decreased"

fi
done

Я использую этот код, который является просто шоу, которое обрабатывает количество, увеличен или уменьшен. Таким образом, как развернуть это так, чтобы, если увеличено, какие процессы были добавлены и, если уменьшено, который обрабатывает вышедший?

0
задан 1 December 2016 в 02:36

1 ответ

Для этого необходимо будет сохранить вывод ps aux в переменной и делают некоторое сообщение, обрабатывающее позже с инструментами как awk, sed и т.п..

Вот пример такой реализации:

#!/bin/bash
PS_OUT="$(ps aux)"
while true
do
    NEW_OUT="$(ps aux)"

    # quick explanation :
    # - NR==FNR : in the case of the 1st file
    #   -> we create the dictionary : a[line] = 1
    # - NR!=FNR : in the case of the 2nd file
    #   -> we add 2 to the value of the dictionary a[line]
    awk 'NR==FNR{a[$0]++} NR!=FNR{a[$0]=a[$0]+2}
    END{
            # for every existing key in our dictionary ...
            for (l in a)
            {
                    # if a[line] is equal to 1, it was only encountered in  the first file
                    if (a[l]==1) print "process removed : "l

                    # if a[line] is equal to 2, it was only encountered in  the second file
                    if (a[l]==2) print "process added :   "l
                    # if it was encountered in both files, it should be equal to 3
            }
    # we substitute the content of our variables so that awk considers them as input files
    }' <(echo "$PS_OUT") <(echo "$NEW_OUT")

    PS_OUT="$NEW_OUT"
    sleep 5
done
0
ответ дан 28 September 2019 в 02:21

Другие вопросы по тегам:

Похожие вопросы: