Рейтинг:0

Как убить скрипт, работающий в фоновом режиме, но получить PID скрипта только тогда, когда он был запущен с определенным флагом

флаг in
Cas

Я могу запускать несколько экземпляров сценария bash в фоновом режиме, и все отлично. У меня это настроено так, как у некоторых -Икс как флаг, а некоторые нет. Видеть:

./test.sh &
./test.sh &
./test.sh -x &
./test.sh -x &

Теперь я хочу убить все сценарии, которые были запущены с -Икс флаг. Я всегда убиваю скрипты, работающие в фоновом режиме, используя это:

пс-доп | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh$)" | \
при чтении -r уровень
делать
   убить $уровень
сделано

Однако, пс-доп не показывает никаких аргументов/флагов, которые были заданы при запуске скрипта. Поэтому при его использовании я могу не только захватить сценарии, которые были запущены с -Икс. Есть ли этому решение? Я хочу только убить фоновые сценарии, которые были запущены с -Икс.

Рейтинг:1
флаг uz
Jos

Использовать убить команда с -f флаг.

Команда pkill test.sh убьет все процессы, используя тест.ш как имя команды. С использованием -f флаг объясняется в человек pgrep, как pgrep и убить используйте аналогичный синтаксис:

-ф, --полный

Шаблон обычно сопоставляется только с именем процесса. При установке -f используется полная командная строка.

Однако вам нужно заключить шаблон поиска в кавычки и избежать - из -Икс. Так pkill -f "test.sh \-x" убьет только тест.ш процессы, которые выполняются с -Икс флаг.

флаг hr
... или используйте флаг конца опций `--` `pkill -f -- "test.sh -x"` ... вы также можете использовать шаблон `"test.sh[ \t]+-x "`, чтобы разрешить произвольные горизонтальные пробелы
флаг uz
Jos
Хороший вопрос @steeldriver. Мне всегда удается забыть о `--`.
флаг hr
... когда вы думаете об этом, это немного странно, что `pgrep`/`pkill` не реализуют вещь `-e pattern`, которую обычная grep должна устранять неоднозначность шаблона из параметров
Рейтинг:1
флаг bd

Пытаться

пс-аФ | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh -x$)"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.