Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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, это еще одно решение.