Как удалить диск из раздела lvm?

Если все ваши исполнения test.sh  всегда проходят такую ​​проверку сторожевой защиты, тогда вы можете просто:

pid=$(pgrep -o -f "/test.sh( |$)") && [ ${pid} -ne ${$} ] && kill $pid

Приведенная выше строка уничтожает только самое старое выполнение, если только оно не совпадает с текущим выполнением, как бы оно ни было вызвано.

Но на всякий случай, если вы хотите быть абсолютно уверены, что никакие предыдущие выполнения никогда не пропускали проверку, вы можете поместить приведенную выше строку в цикл while, например:

while pid=$(pgrep -o -f "/test.sh( |$)") && [ ${pid} -ne ${$} ] ; do
    kill $pid
done

Вышеприведенное убивает любые предыдущие выполнения test.sh, как бы они ни вызывались.

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

Вы можете сделать это, заключив любые аргументы, которые хотите проверить, в двойные -кавычки,вот так:

(примечание :Я показываю только часть pgrepдля использования в приведенном выше коде)

pgrep -o -f "/test.sh +arg1 +arg2 *$"

Дополнительные +и *$ должны совпадать не больше и не меньше, чем эти точные аргументы.(В этом примере литеральные строки arg1иarg2).

Вы также можете передавать переменные, поэтому, например, одним из желательных вариантов может быть уничтожение только тех предыдущих выполнений, которые были запущены с теми же аргументами, что и текущее выполнение:

pgrep -o -f "/test.sh +${*} *$"

Здесь ${*}переводится во все аргументы текущего выполнения.

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

0
07.06.2020, 20:11
0 ответов

Теги

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