Команда Linux, чтобы проверить, запущена ли оболочка script или нет

Что такое команда linux, чтобы определить, работает ли процесс aa.sh или нет. Команда ps не работает, и она не отображает имена оболочки script.

Просьба сообщить.

Ответы

Ответ 1

Проверьте это

ps aux | grep "aa.sh"

Ответ 2

Самое простое решение:

pgrep -fl aa.sh

Ответ 3

Добавление к ответам выше -

Для использования в script используйте следующее: -

result=`ps aux | grep -i "myscript.sh" | grep -v "grep" | wc -l`
if [ $result -ge 1 ]
   then
        echo "script is running"
   else
        echo "script is not running"
fi

Ответ 4

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

Ложные срабатывания могут возникать, если сам исполняемый файл соответствует совпадению, или любые аргументы, которые не соответствуют именам script, - вероятность того, что вероятность больше, с сценариями, которые не имеют расширений имени файла.

Здесь более надежное решение для сценариев, используя функцию оболочки:

getscript() {
  pgrep -lf ".[ /]$1( |\$)"
}

Пример использования:

# List instance(s) of script "aa.sh" that are running.
getscript "aa.sh"  # -> (e.g.): 96112 bash /Users/jdoe/aa.sh

# Use in a test:
if getscript "aa.sh" >/dev/null; then
  echo RUNNING
fi
  • Соответствие чувствительно к регистру (в OSX вы можете добавить -i к вызову pgrep, чтобы сделать его случайным * в * чувствительным, а в Linux это не вариант.)
  • Функция getscript также работает с полными или частичными путями, которые включают компонент имени файла; частичные пути не должны начинаться с /, и каждый указанный компонент должен быть завершен. "Полнее" заданный путь, тем ниже риск ложных срабатываний. Предоставление: соответствие пути будет работать только при вызове script с помощью пути - это, как правило, справедливо для скриптов в $PATH, которые вызываются напрямую.
  • Даже эта функция не может исключить все ложные срабатывания, поскольку пути могут иметь встроенные пространства, но ни ps, ни pgrep не отражают исходное цитирование, применяемое к командной строке. Все функции гарантируют, что любое совпадение не является первым токеном (который является интерпретатором), и что он встречается как отдельное слово, необязательно предшествующее пути.
  • Еще один подход к минимизации риска ложных срабатываний может заключаться в том, чтобы совместить исполняемое имя (т.е. интерпретатор, например, bash), - при условии, что оно известно; например.
# List instance(s) of a running *bash* script.
getbashscript() {
  pgrep -lf "(^|/)bash( | .*/)$1( |\$)"
}

Если вы хотите сделать дополнительные предположения, такие как script -interpreter paths, которые никогда не содержат внедренных пространств, регулярные выражения могут быть более жесткими и, следовательно, еще больше снизить риск ложных срабатываний.

Ответ 5

pgrep -f aa.sh 

Чтобы что-то сделать с идентификатором, вы его обмениваете. Здесь я убиваю все свои дочерние задачи.

pgrep aa.sh | xargs pgrep -P ${} | xargs kill

Если вы хотите выполнить команду, если процесс выполняется, выполните

pgrep aa.sh && echo Running

Ответ 6

Я был полностью вдохновлен последним ответом mklement0 - у меня есть несколько скриптов/небольших программ, которые я запускаю при каждой перезагрузке через /etc/crontab. Я построил его ответ и создал логин script, который показывает, все ли мои программы все еще запущены. Я выполняю этот scripts.sh через .profile файл при каждом входе в систему, чтобы получать мгновенное уведомление при каждом входе в систему.

cat scripts.sh 
#!/bin/bash

getscript() {
  pgrep -lf ".[ /]$1( |\$)"
}

script1=keepalive.sh
script2=logger_v3.py

# test if script 1 is running
if getscript "$script1" >/dev/null; then
  echo "$script1" is RUNNING
  else
    echo "$script1" is NOT running
fi

# test if script 2 is running:
if getscript "$script2" >/dev/null; then
  echo "$script2" is RUNNING
  else
    echo "$script2" is NOT running
fi

Ответ 7

Проверьте это

ps -ef | grep shellscripname.sh

Вы также можете найти свой текущий процесс в

ps -ef

Ответ 8

Дайте опцию ps для отображения всех процессов, например:

ps -A | grep "myshellscript.sh"

Отметьте http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/ для получения дополнительной информации

И как сказал Базиле Старинкевич в комментарии pgrep, это еще одно решение.