Если Вы хотите учиться в и outs процесса начальной загрузки и всех других положительных героев Linux, дистрибутив как хинду или Slackware мог бы быть хорошей детской площадкой для Вас. Учит Вас создавать свои собственные ядра и загрузочные образы и программное обеспечение также.
Существуют другие инструменты, а не ps
для поиска процессов на основе их имен.
$ pgrep name
$ sleep 100 &
[1] 2556
$ pgrep sleep
2556
Выше мы видим названный процесс sleep
запускается и затем фон. Если мы используем pgrep
для поиска процессов с тем именем, мы возвращаем его PID.
Относительно Вашего вопроса о выводе, являющемся пробелом. Когда команды возвратятся, они часто будут времена возвратить код состояния, который хранится в специальной переменной, $?
в Оболочках Bourne, таких как Bash. Таким образом, просто необходимо опросить содержание этой переменной, чтобы узнать, присутствовало ли имя процесса, которое Вы искали, или нет.
Подобное использование в качестве примера sleep
снова.
$ sleep 100 &
[1] 3228
Ищите PID названного процесса sleep
.
$ pgrep sleep
3228
Проверьте его переменную состояния, $?
, нуль означает, что выполнил успешно и нашел то, что мы искали.
$ echo $?
0
Теперь, если мы ищем поддельный названный процесс sleepy
.
$ pgrep sleepy
Мало того, что мы не получаем вывода, но и переменная состояния имеет тот в ней, обозначая, что команда, которую мы выполнили, было неудачно в нахождении, что мы искали.
$ echo $?
1
Можно объединить команды следующим образом:
ps <pid> || echo "message"
Если pid будет существовать, то Вы еще получите pid, Вы получите распечатанное сообщение.
Я нападу на вопрос от другого угла. Ответ pgrep <some string>
должен действительно быть Ваш последний выбор. Позвольте мне объяснить почему.
В любом Unix/Linux ОС там не является никаким предсказуемым способом выяснить, работает ли 'процесс', если у Вас нет PID того процесса. Все методы на основе строкового сопоставления с образцом на векторе аргумента процесса обречены перестать работать рано или поздно. Пример: можно думать это, например. pgrep mysqld
что необходимо выяснить, выполняет ли база данных MySQL, но приводит день к сбою, кто-то запускает второй экземпляр MySQL на том хосте, который был бы совершенно судебным иском.
Из-за проблем в использовании строкового сопоставления с образцом при нахождении процессов Вы испытаете тот, почти все 'профессиональные' сценарии используют pidfile метод, т.е. они удостоверяются, что PID сохраняется в файле, когда процесс запускается. Проблема затем становится: "Как проверить, работает ли PID?" где Вы обычно делали бы ps -p xxxx -o pid=
который возвратит сам PID, если процесс будет работать и иначе ничто. Преимущество этой команды - то, что это портативно через Linux/Solaris/BSD.
Я повторю меня: Если необходимо обратиться к чему-то как pgrep name
в Вашем сценарии проверки затем Вы сделали что-то не так при запуске процесса. pgrep name
должна быть последняя опция, Вы пытаетесь, действительно только релевантно, если Вы не управляете, как процесс запускается. Также не дурачьте сообщения в блоге в Интернете, который приведет Вас полагать, что Unix/Linux имеет понятие названия процесса. В Unix/Linux нет такой вещи как имя процесса, по крайней мере, не что-то даже удаленно уникальное. Мне жаль, что не было, но нет. Единственной вещью, уникальной о данном процессе, является PID.