Редактировать Из комментариев ниже я написал вводящее в заблуждение / вводящее в заблуждение введение, поэтому я переписываю его.
У меня есть сценарий 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, КОТОРЫЙ НЕ РАБОТАЕТ!
Пожалуйста, измените строку:
pgrep tv-timer | grep -v $$ > ~/tv-timer2.log
на это:
pgrep tv-timer | grep -v ^$$$ > ~/tv-timer2.log
На самом деле, если один из tv-timer prosesses имеет, скажем, PID = 26019, и должен $$ be 6019, тогда grep даст пустую строку, которая вам не нужна.