Я читал, что ps
команда может принимать флаги в двух форматах:
- Формат Unix, в котором перед флагами следует ставить дефис.
- Формат BSD, в котором не следует ставить дефис перед флагами.
Теперь одни и те же флаги можно использовать в обоих форматах, например, означают ли следующие команды одно и то же:
ps -x
ps x
Или формат Unix имеет свой собственный набор флагов, а формат BSD — совершенно другой набор флагов?
решение1
Theстраница руководстваотвечает на ваш вопрос:
Варианты разных типов можно свободно смешивать, но могут возникнуть конфликты. Существуют некоторые синонимичные варианты, которые функционально идентичны, благодаря множеству стандартов и
ps
реализаций,ps
с которыми это совместимо.Обратите внимание, что
ps -aux
отличается отps aux
. Стандарты POSIX и UNIX требуют, чтобыps -aux
печатались все процессы, принадлежащие пользователю с именем "x", а также печатались все процессы, которые будут выбраны параметром-a
. Если пользователь с именем "x" не существует, этот ps может интерпретировать команду какps aux
вместо этого и вывести предупреждение. Такое поведение предназначено для помощи в переходе к старым сценариям и привычкам. Оно хрупкое, может меняться, и поэтому на него не следует полагаться.
Флаги разные, но их можно комбинировать. Обычно выбираешь один,напримерлибо ps aux
, либо , ps -ef
чтобы увидеть детали всех процессов, а не их смесь.
Единственный x
флаг — это флаг BSD, поэтому ps x
и ps -x
дают одинаковый результат; но это не работает для флагов, определенных в обоих вариантах.
Все это относится кprocps
иprocps-ng
. Эквивалентность ps x
и ps -x
является результатом этапа синтаксического анализа «второго шанса», который вызывается, если первый проход не полностью разбирает все аргументы; это не документировано в man-странице, но упоминается вфайл HACKING
в исходном коде:
Если только личность не заставляет парсить BSD, parser.c пытается парсить командную строку как смешанную смесь BSD+SysV+Gnu. В случае неудачи предпринимается попытка парсить BSD. Если парсить BSD не удаетсяпослеБыла предпринята попытка анализа SysV, сообщение об ошибке получено из исходного анализа SysV.