Назад | Перейти на главную страницу

Как сделать так, чтобы скрипт и его команда были убиты после закрытия терминала

Я написал сценарий, и он работает нормально. Он выполняет некоторые операции с хвостом и 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 и убейте свою фоновую работу оттуда.

Подробности:

  1. Создайте файл PID в своем tail/grep скрипт так:

    echo $$ > $HOME/script.pid
    
  2. Добавьте перехватчик выхода в оболочку входа, добавив что-то вроде этого в свой $HOME/.bash_profile :

    function finish {
      # Your cleanup code here
      kill -9 `cat $HOME/script.pid`
    }
    trap finish EXIT
    
  3. Прибыль.

Это сломается, если вы попросите tail скрипт несколько раз. С этим можно справиться создание файла блокировки или пропуская script.pid файл и создание killall <scriptname> внутри trap функция.