Проверьте количество запущенных скриптов, используя ps

Я пишу скрипт (show_volume.sh), который можно вызывать несколько раз за короткие промежутки времени. Мне нужен способ определить, существует ли более одного запущенного экземпляра этого скрипта. Я подумал, что мог бы использовать psЯ написал эту функцию на Bash:

is_only_process(){
    PCOUNT=`ps -a | grep show_volume.sh | wc -l`
    echo $PCOUNT
    if (( PCOUNT==1 )); then
        return 1 
    fi  
    return 0
}

Поэтому я добавил эти 2 строки

is_only_process
sleep 4

и запустил этот скрипт один раз, но вывод echo $PCOUNT не имеет никакого смысла для меня. Я всегда получаю значение 2, а не 1, как ожидалось. Когда я запускаю эту команду

ps -a | grep show_volume.sh | wc -l

из другого терминала во время работы скрипта я получаю значение 1. Это почти то же самое, когда я запускаю этот скрипт несколько раз подряд, например, 10 раз, используя цикл for. Сам скрипт определяет значения, которые слишком высоки, в то время как я получаю правильные значения при использовании другого терминала.

Теперь, почему этот сценарий определяет эти нечетные значения?

4 ответа

Решение

В данный момент ps запускает процесс grep show_volume.sh также работает, так что вы всегда рассчитываете grep!

Простое решение, grep s[h]ow_volume.sh, Grep (не shell) свернет [h] в h и искать то, что вы хотите, но ваш grep не будет совпадать сам по себе, потому что он будет иметь [] в параметре.

pgrep также полезен для этой задачи и достаточно умен, чтобы всегда исключать себя.

Если вы запускаете скрипт от имени разных пользователей, тогда ps -a будет показывать только экземпляры для текущего пользователя и только с подключенным терминалом. использование ps -ax или же ps -e,

pgrep -c

покажет счет без использования wc,

Попробуйте также исключить grep, поскольку сам ваш grep также содержит show_volume.sh, пример

ps -a | grep show_volume.sh | grep -v grep | wc -l

Решение, предоставленное ajreal:

пс-а | grep show_volume.sh | grep -v grep | туалет

должно сработать. Если это не так, пожалуйста, предоставьте вывод

пс-а | grep show_volume.sh | grep -v grep

Вот

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