Я обращаюсь к управляющим процессам, которые инициируются или закрываются пользователем или системой в сценарии удара. Там какой-либо путь состоит в том, чтобы проверить, какой процесс инициируется теперь и для закрытого процесса, что этот процесс закрывается теперь?
#!/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
Я использую этот код, который является просто шоу, которое обрабатывает количество, увеличен или уменьшен. Таким образом, как развернуть это так, чтобы, если увеличено, какие процессы были добавлены и, если уменьшено, который обрабатывает вышедший?
Для этого необходимо будет сохранить вывод 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