Что такое команда linux, чтобы определить, работает ли процесс aa.sh или нет. Команда ps не работает, и она не отображает имена оболочки script.
Просьба сообщить.
Что такое команда linux, чтобы определить, работает ли процесс aa.sh или нет. Команда ps не работает, и она не отображает имена оболочки script.
Просьба сообщить.
Проверьте это
ps aux | grep "aa.sh"
Самое простое решение:
pgrep -fl aa.sh
Добавление к ответам выше -
Для использования в 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
Вышеприведенные решения отлично подходят для интерактивного использования, где вы можете увидеть результат и отбросить ложные срабатывания таким образом.
Ложные срабатывания могут возникать, если сам исполняемый файл соответствует совпадению, или любые аргументы, которые не соответствуют именам 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
-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, которые никогда не содержат внедренных пространств, регулярные выражения могут быть более жесткими и, следовательно, еще больше снизить риск ложных срабатываний.
pgrep -f aa.sh
Чтобы что-то сделать с идентификатором, вы его обмениваете. Здесь я убиваю все свои дочерние задачи.
pgrep aa.sh | xargs pgrep -P ${} | xargs kill
Если вы хотите выполнить команду, если процесс выполняется, выполните
pgrep aa.sh && echo Running
Я был полностью вдохновлен последним ответом 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
Проверьте это
ps -ef | grep shellscripname.sh
Вы также можете найти свой текущий процесс в
ps -ef
Дайте опцию ps для отображения всех процессов, например:
ps -A | grep "myshellscript.sh"
Отметьте http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/ для получения дополнительной информации
И как сказал Базиле Старинкевич в комментарии pgrep
, это еще одно решение.