Что такое команда linux, чтобы определить, работает ли процесс aa.sh или нет. Команда ps не работает, и она не отображает имена сценариев оболочки.Команда Linux, чтобы проверить, запущен ли сценарий оболочки или нет.
Просьба сообщить.
Что такое команда linux, чтобы определить, работает ли процесс aa.sh или нет. Команда ps не работает, и она не отображает имена сценариев оболочки.Команда Linux, чтобы проверить, запущен ли сценарий оболочки или нет.
Просьба сообщить.
Проверить это
ps aux | grep "aa.sh"
Это может дать вам некоторые сюрпризы, позвольте мне привести вам два примера одновременно. Во-первых: он найдет также «aaa.sh», что может привести к ошибкам. Во-вторых: grep найдет себя, с чем вам приходится иметь дело. Pgrep - элегантное решение. – user897079
Мы можем использовать трюк, чтобы предотвратить появление grep: 'ps aux | grep "[a] a.sh" ' – Vassilis
Дайте возможность для пса, чтобы отобразить все процессы, пример может служить:
ps -A | grep "myshellscript.sh"
Проверить http://www.cyberciti.biz/faq/show-all-running-processes-in-linux/ для получения дополнительной информации
И как Basile Starynkevitch упоминается в комментариях pgrep
является еще одним решением.
Добавление к выше ответов -
Чтобы использовать в скрипте, используйте следующее: -
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
Если я запустил' ps aux | grep -i "myscript.sh" | grep -v "grep" | wc -l' alone, вывод равен 0. Если я запустил его в своем скрипте, результат будет равен 2, а сценарий будет завершен. Какие-нибудь предложения в чем-то не так? – Ahue
один для скрипта, а один для самой grep. если вы попробуете 'ps aux | grep hello' в терминале, вы увидите grep как процесс. Чтобы предотвратить появление grep, я использую трюк: 'ps aux | grep [h] ello' – Vassilis
Самое простое решение:
pgrep -fl aa.sh
, если кто-то задавался вопросом, что это делает, [см. пояснения] (http://www.explainshell.com/explain?cmd=pgrep+-fl+aa.sh) – tutuDajuju
@tutuDajuju: Полезно, спасибо ; небольшое касание: стоит обратить более пристальное внимание на службу, к которой вы ссылаетесь: http://explainshell.com может анализировать произвольные командные строки Unix и объяснять конкретные варианты, используемые на основе пользовательских страниц Ubuntu. Вот явный URL, объясняющий этот ответ: http://www.explainshell.com/explain?cmd=pgrep+-fl+aa.sh – mklement0
Решения abo ve отлично подходят для интерактивного использования, где вы можете увидеть результат и отбросить ложные срабатывания.
Ложные срабатывания могут возникать, если сам исполняемый файл подходит, или любые аргументы, не совпадающие с именами сценариев, - вероятность больше с сценариями, которые не имеют расширений имени файла.
Вот более надежный решение для сценариев а, используя функцию оболочки:
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
также работает с полными или частичными путями, которые включают компонент имени файла; частичные пути не должны начинаться с /
, и каждый указанный компонент должен быть заполнен. «Полнее» заданный путь, тем ниже риск ложных срабатываний. Caveat: соответствие пути будет работать только в том случае, если скрипт был вызван с путём - это, как правило, справедливо для скриптов в $ PATH, которые вызываются напрямую.ps
, ни pgrep
не отражают исходное цитирование, применяемое к командной строке. Все функции гарантируют, что любое совпадение - - не первый токен (который является интерпретатором), и что он встречается как отдельное слово, опционально которому предшествует путь.bash
) - при условии, что он известен; например# List instance(s) of a running *bash* script.
getbashscript() {
pgrep -lf "(^|/)bash(| .*/)$1(|\$)"
}
Если вы готовы сделать дальнейшие предположения - например, скрипт-интерпретатор пути никогда не содержащий пробелы - в регулярные выражения можно было бы сделать более ограничительный характер и тем самым еще больше снизить риск ложных срабатываний.
pgrep -f aa.sh
Чтобы сделать что-то с идентификатором, вы его пропустите. Здесь я убиваю все свои дочерние задачи.
pgrep aa.sh | xargs pgrep -P ${} | xargs kill
Если вы хотите, чтобы выполнить команду, если процесс запущен сделать это
pgrep aa.sh && echo Running
я был весьма вдохновлен последним ответом на mklement0 - У меня есть несколько сценариев/небольшие программы, я бег на каждый перезагрузитесь через /etc/crontab
. Я построил его ответ и создал сценарий входа, который показывает, все ли мои программы все еще запущены. Я выполняю это 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
'пс -ae' показывает SCRIPTNAME для меня. – nims
'ps aux | grep scriptname' или' pgrep scriptname' –
Или 'pidof', чтобы просто получить PID. – tripleee