Я написал сценарий, и он работает нормально. Он выполняет некоторые операции с хвостом и grep. Когда я закрываю свой терминал и определяю PID моего скрипта, я могу обнаружить, что скрипт все еще присутствует в выводе «ps -eaf | grep -i myScript.sh». Однако я не хочу такого поведения. Мне нужно знать, как мне справиться с такой ситуацией. Я не хочу нагружать процессор своим скриптом. Пожалуйста, дайте мне знать. Я искал в Google и в основном нашел «Как сохранить скрипт в фоновом режиме». но я не мог получить ничего конкретного о том, чтобы остановить это.
Заранее спасибо.
user 9405 18803 0 07:32 pts/72 00:00:00 grep 29735
user 29735 11903 0 07:24 pts/30 00:00:00 sh myScript.sh
user 29818 29735 0 07:24 pts/30 00:00:00 tail -f --pid=29735 /var/log/message
user 29830 29735 0 07:24 pts/30 00:00:00 -csh
Ваш скрипт запускается в другой оболочке и использует -f
вариант (продолжение) tail
который добавляет вывод по мере роста файла. Короче говоря, у сценария нет точки выхода, поэтому он не должен заканчиваться, даже если вы хотите, чтобы сценарий это делал.
tl;dr:
создать хук выхода из bash и убейте свою фоновую работу оттуда.
Подробности:
Создайте файл PID в своем tail
/grep
скрипт так:
echo $$ > $HOME/script.pid
Добавьте перехватчик выхода в оболочку входа, добавив что-то вроде этого в свой $HOME/.bash_profile
:
function finish {
# Your cleanup code here
kill -9 `cat $HOME/script.pid`
}
trap finish EXIT
Прибыль.
Это сломается, если вы попросите tail
скрипт несколько раз. С этим можно справиться создание файла блокировки или пропуская script.pid
файл и создание killall <scriptname>
внутри trap
функция.