
Я наткнулся на эту ссылку:«наблюдайте» за выводом команды до тех пор, пока не будет обнаружена определенная строка, а затем выйдите
Я знаю PID процесса. Я хочу зарегистрировать процесс "потребление ресурсов" с помощью top.
По сути top -p PID -b >> LOGFILE
.
Я хочу, чтобы это запускалось с шагом, скажем, каждые 5 секунд, используя команду «watch»
watch -n 5
Из независимой/внешней программы я добавлю в файл журнала запись «Мы закончили».
Я хочу, чтобы ведение журнала watch/top прерывалось/завершалось, когда «Мы закончили». Поэтому grep
следует оценивать весь файл журнала, а не только текущее значение.
Я хочу, чтобы команда выполнялась в неблокируемой форме... возможно, заканчивалась на " &
"
Я установил -d на 5, чтобы top и watch создавались одновременно? ...
Вот моя попытка использовать опцию «-e», предложенную по ссылке выше, но она не работает так, как ожидалось... PID и LOGFILE — подходящие значения.
watch -n 5 -e "! top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &
решение1
until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done
Если вы хотите выйти из журнала процесса, когда pid больше не выполняется, то приведенный ниже скрипт должен сработать? (это позволяет избежать записи двумя процессами в один и тот же файл?)
Он принимает три параметра: PID, местоположение LOGFILE и ВРЕМЯ между записями журнала.
#!/bin/bash
if [ $# -lt 3 ]
then
echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
exit 1;
fi
while :
do
if ps -p $1 > /dev/null ; then
top -n 1 -b -p $1 >> $2;
else
echo "Exited No pid";
break;
fi
sleep $3;
done