Освобождение кнопки захвата в Android

Более простым способом проверки уже выполняющегося процесса является команда pidof.

if pidof -x "abc.sh" >/dev/null; then
    echo "Process already running"
fi

В качестве альтернативы, ваш сценарий может создать PID-файл при запуске. Затем нужно просто проверить наличие файла PID, чтобы определить, запущен ли уже процесс.

#!/bin/bash
# abc.sh

mypidfile=/var/run/abc.sh.pid

# Could add check for existence of mypidfile here if interlock is
# needed in the shell script itself.

# Ensure PID file is removed on program exit.
trap "rm -f -- '$mypidfile'" EXIT

# Create a file with current PID to indicate that process is running.
echo $ > "$mypidfile"

...

Обновление: Теперь вопрос изменен для проверки из самого скрипта. В этом случае мы ожидаем, что всегда будет запущен хотя бы один abc.sh. Если их более одного abc.sh, то мы знаем, что процесс все еще выполняется. Я бы по-прежнему предлагал использовать команду pidof, которая выдаст 2 PID, если процесс уже запущен. Вы можете использовать grep, чтобы отфильтровать текущий PID, выполнить цикл в оболочке или даже вернуться к простому подсчету PID с помощью wc для обнаружения нескольких процессов.

Вот пример:

#!/bin/bash

for pid in $(pidof -x abc.sh); do
    if [ $pid != $ ]; then
        echo "[$(date)] : abc.sh : Process is already running with PID $pid"
        exit 1
    fi
done
28
задан astuter 4 August 2016 в 10:00
поделиться