Мой ответ - это вариант типичного ответа для поиска «foobar» в ps
листинге. Аргументация "-A" "ps"
является более переносимой, чем "aux"
, я полагаю, но это изменение не имеет отношения к ответу. Типичный ответ выглядит так:
$ ps -A -ww | grep [f]oobar
Вместо этого я использую этот шаблон:
$ ps -A -ww | grep [^]]foobar
Основное преимущество заключается в том, что на основе этих шаблонов легче писать сценарии, поскольку вы просто объединяете статическую строку [^]]
с любым шаблоном, который ищете. Вам не нужно удалять первую букву строки, затем вставлять ее между квадратными скобками, а затем снова объединять ее. При создании сценариев в оболочке проще просто придерживаться [^]]
шаблона, который вы искали. Разрезание строк в Bash - отвратительная вещь, поэтому мой вариант этого избегает. Этот вариант говорит о том, что показывают линии, в которых шаблон соответствует БЕЗ ведущей правой квадратной скобки]. Поскольку шаблон поиска для исключения квадратной скобки фактически добавляет квадратную скобку к шаблону, он никогда не будет совпадать сам по себе.
Таким образом, вы можете написать переносимую psgrep
команду следующим образом. Здесь я делаю некоторые различия между Linux, OS X BSD и другими. Это добавляет заголовки столбцов ps
, обеспечивает более настраиваемыйps
формат, который мне больше подходит, и отображает процессы, перечисляющие дополнительные, очень широкие, так что ни один из аргументов командной строки не будет пропущен. Ну, большинство не пропустили. Java - это Java, она часто работает в наихудшем из возможных способов, поэтому некоторые java-сервисы будут работать с максимально допустимой длиной аргументов, которую будет отслеживать таблица процессов. Я считаю, что это 1024 символов. Длина в одиночку, позволяющая запустить процесс, намного длиннее, но таблица процессов ядра не заботится о том, чтобы отслеживать что-то более 1 КБ. Когда команда запущена, имя команды и список аргументов не нужны, поэтому то, что хранится в таблице процессов, является просто информационным.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.