Удаление предыдущих экземпляров сценария перед запуском того же сценария Unix

Если ваш find не имеет этой опции, метод, который работает в UNIX с 70-х годов:

ls -ls file

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

4
20.10.2015, 04:13
3 ответа
kill -9 $(pgrep -f ${BASH_SOURCE[0]} | grep -v $$)

Очень просто.
Использует pgrep для поиска всех экземпляров текущего запущенного скрипта.

pgrep удобен тем, что возвращает только pid.

Затем извлеките текущий запущенный pid с помощью $$, чтобы избежать самоубийства.

Наконец kill -9 завершает предыдущие экземпляры.

0
27.01.2020, 20:49

kill -9 $ (pgrep -f ${BASH _SOURCE[0]} | grep -v $$)

Очень просто. Использует pgrep для поиска всех экземпляров текущего запущенного скрипта. pgrep удобен тем, что возвращает только pid. Затем вытащите текущий запущенный pid, чтобы он не покончил с собой. Наконец kill -9 завершает предыдущие экземпляры.

-1
27.01.2020, 20:49

Вы можете использовать $0вместо ${BASH_SOURCE[0]}.

Мне пришлось использовать pgrep -f <filename>вместо pidof -x <filename>, потому что последний по какой-то причине ничего не возвращал.

Кроме того, kill -9здесь не нужен.

Итак, результат (, вдохновленный ответом @jcbermy):

#!/bin/bash
for pid in $(pgrep -f $0); do
    if [ $pid != $$ ]; then
        kill $pid
    fi 
done
0
25.06.2021, 11:49

Теги

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