Используя regex, чтобы видеть, закончился ли процесс UNIX

Даже при том, что Вы уже получили ответ на свой вопрос, другие могли бы найти это полезным.

Команды Vim могут также быть указаны в файле, который выполняется с помощью -s опция:

    vim -s commands.txt file

Пример:

    echo 'gg=G' > indent.txt
    echo ':wq' >> indent.txt
    vim -s indent.txt file

Это будет использовать Vim, чтобы расположить содержание с отступом файла, сохранить и выход.

1
07.11.2010, 23:35
4 ответа

Команда pgrep печатает список PIDs для всех процессов (кроме себя) то соответствие a grep- совместимое регулярное выражение.

Это ничего не печатает, при отсутствии соответствий.

Это должно быть достаточным тестом: [ $(pgrep process | wc) -gt 0 ] верно, если процесс работает. Ложь, если нет.

3
27.01.2020, 23:14
  • 1
    В некоторых случаях полезно использовать флаг-f с pgrep. Это позволяет искать полное имя командной строки. Например, если программа запущена с java -jar bla.jar, pgrep bla перестал бы работать, в то время как pgrep -f bla успешно выполнился бы. –  bbaja42 04.01.2012, 07:34
  • 2
    у меня нет абсолютно никакой идеи, почему Вы используете [. Просто используйте pgrep process > /dev/null 2>&1. –  Chris Down 25.02.2012, 16:25

Я не знаком с psg, но я знаю (твердый путь, так сказать), если я работаю ps ax | grep progname видеть, работает ли какой-либо процесс, который содержит progname, Я буду всегда получать a с тех пор grep progname самостоятельно команда, которая содержит "progname".

Я не знаю жемчуг, но в ударе, я обхожу это как это, например, если я хочу проверить, работает ли какой-либо экземпляр progname, я работаю ps ax | grep -c "[p]rogname", который решает проблему всегда получения да.

2
27.01.2020, 23:14

Ваш regexp m/dtllst $myNode | $myNode/ будет соответствовать (в особенности) любому возникновению $myNode. Конструкцией, psg dtllst | grep $myNode возвратит что-то, что соответствует $myNode, так Вы regexp всегда соответствует.

Если Вы не можете последовать совету и использованию других людей pgrep или ps ... | grep или варианты этого, Вы могли также:

  1. набор "$checkProc = psg dtllst | grep 'dtllst $myNode';" и затем просто тест, если $checkProc непусто, или

  2. набор "$checkProc = psg dtllst;" и затем соответствуйте ему против m/dtllst $myNode/

  3. Используйте Proc:: модуль ProcessTable CPAN и просто ищет запись $p таким образом, что $p->cmdline =~ m/dtllst $myNode/

2
27.01.2020, 23:14

Я не знаю, является ли это тем, что Вы ищете, но это - то, как можно получить PID программы:

ps -e -o pid= -o args= | sed 's/^\s*//' | grep 'dtllst pe99' | cut -d' ' -f1

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

Можно использовать это для передачи по каналу его в другую программу, если Вам нравится, и если Вам нужны все PIDs сразу, можно перенести все это в $():

MyPIDs=$(ps -e -o pid= -o args= | sed 's/^\s*//' | grep 'dtllst pe99' | cut -d' ' -f1)
echo $MyPIDs
0
27.01.2020, 23:14

Теги

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