Как может скрипт Bash убить “ sleep ” версия уже запущена?

Редактировать Из комментариев ниже я написал вводящее в заблуждение / вводящее в заблуждение введение, поэтому я переписываю его.

У меня есть сценарий bash под названием « Edit », на который можно нажать рабочий стол. Через 30 минут он блокирует экран, и пользователь должен ввести свой пароль, чтобы разблокировать экран. Однако, если пользователь меняет свое мнение или хочет сбросить таймер, он должен снова щелкнуть ярлык на рабочем столе, и он должен убить предыдущую работу, которая будет спать и считать вниз.

Соответствующий фрагмент кода:

pgrep tv-timer > ~/tv-timer.log
PID=$$ # Current Process ID

Используя cat ~/tv-timer.log:

16382
20711
]

Один из них равен «$ PID» выше, а другой - ранее выполненная копия, которую я хочу использовать kill #####.

Каков наилучший способ выяснить, > «$ PID» и убить его?

При первом запуске скрипта есть только одна запись, равная «$ PID», которую я не хочу убивать.

Спасибо за вашу помощь!

Предлагаемый дубликат (предотвращение дублирования скрипта, выполняемого в одно время) является проблемой в процессах «Родительский и дочерний». Принятые ответы являются длинными и сложными с использованием сценариев-оболочек и / или нескольких строк кода.

Решение, требуемое здесь, является Parent

. Действительно, принятый вариант ответа основан на дублирующей попытке OP, КОТОРЫЙ НЕ РАБОТАЕТ!

1
задан 13 April 2017 в 15:24

1 ответ

Пожалуйста, измените строку:

pgrep tv-timer | grep -v $$ > ~/tv-timer2.log

на это:

pgrep tv-timer | grep -v ^$$$ > ~/tv-timer2.log

На самом деле, если один из tv-timer prosesses имеет, скажем, PID = 26019, и должен $$ be 6019, тогда grep даст пустую строку, которая вам не нужна.

4
ответ дан 23 May 2018 в 04:16
  • 1
    Но весь код работает так, как есть. Я тестировал его десятки раз. Результаты подтверждены с помощью ps -aux | grep tv-timer из командной строки. BTW после того, как у вас будет достаточно репутации, вы сможете опубликовать этот ответ в виде комментария. Если вы хотите протестировать весь скрипт самостоятельно, посмотрите: askubuntu.com/questions/837078/… – WinEunuuchs2Unix 13 November 2016 в 20:21
  • 2
    grep - инструмент для сопоставления строк, поэтому давайте скажем, что ваш PID, заданный $$, равен 1234. Если grep видит 1234 где угодно в строке, тогда скрипт будет игнорировать PID, который может быть, например, 51234. Это означает, что ваш другой экземпляр не будет убит. Алессандро прав – Sergiy Kolodyazhnyy 14 November 2016 в 06:24

Другие вопросы по тегам:

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