Команда, которая возвращает или идентификатор процесса при выполнении, или некоторый другой вывод если нет?

Если Вы хотите учиться в и outs процесса начальной загрузки и всех других положительных героев Linux, дистрибутив как хинду или Slackware мог бы быть хорошей детской площадкой для Вас. Учит Вас создавать свои собственные ядра и загрузочные образы и программное обеспечение также.

1
06.02.2014, 07:49
3 ответа

Нахождение PID

Существуют другие инструменты, а не ps для поиска процессов на основе их имен.

$ pgrep name

Пример

$ sleep 100 &
[1] 2556

$ pgrep sleep
2556

Выше мы видим названный процесс sleep запускается и затем фон. Если мы используем pgrep для поиска процессов с тем именем, мы возвращаем его PID.

Состояние Checking

Относительно Вашего вопроса о выводе, являющемся пробелом. Когда команды возвратятся, они часто будут времена возвратить код состояния, который хранится в специальной переменной, $? в Оболочках Bourne, таких как Bash. Таким образом, просто необходимо опросить содержание этой переменной, чтобы узнать, присутствовало ли имя процесса, которое Вы искали, или нет.

Пример

Подобное использование в качестве примера sleep снова.

$ sleep 100 &
[1] 3228

Ищите PID названного процесса sleep.

$ pgrep sleep
3228

Проверьте его переменную состояния, $?, нуль означает, что выполнил успешно и нашел то, что мы искали.

$ echo $?
0

Теперь, если мы ищем поддельный названный процесс sleepy.

$ pgrep sleepy

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

$ echo $?
1
1
27.01.2020, 23:38

Можно объединить команды следующим образом:

ps <pid> || echo "message"

Если pid будет существовать, то Вы еще получите pid, Вы получите распечатанное сообщение.

1
27.01.2020, 23:38
  • 1
    я получил идею.. но я не знаю pid, я хочу получить его.. я знаю –  solarisguest 06.02.2014, 06:58
  • 2
    имени процесса привет снова, я попробовал pgrep <процесс> || эхо "сообщение" и его работа.. простой .thanks много маршрутизаторов Cisco –  solarisguest 06.02.2014, 07:00

Я нападу на вопрос от другого угла. Ответ 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.

0
27.01.2020, 23:38

Теги

Похожие вопросы