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

Я написал скрипт, и он работает нормально. Он выполняет некоторые операции с хвостом и 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
0
задан 30 November 2015 в 15:44
2 ответа

Ваш сценарий запускается в другой оболочке и использует параметр -f (следовать) для tail , который добавляет вывод по мере роста файла. Короче говоря, у сценария нет точки выхода, поэтому он не должен заканчиваться, даже если вы хотите, чтобы сценарий это сделал.

2
ответ дан 4 December 2019 в 12:25

tl; dr: создать ловушку выхода bash и уничтожить ваш фон задание оттуда.

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

  1. Создайте файл PID в своем хвосте / grep скрипте следующим образом:

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

     завершение функции {
      # Ваш код очистки здесь
      kill -9 `cat $ HOME / script.pid`
     }
    ловушка конец ВЫХОД
     
  3. Прибыль.

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

1
ответ дан 4 December 2019 в 12:25

Теги

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