Непонятно, что означает формат флагов Unix и BSD для команды "ps"

Непонятно, что означает формат флагов Unix и BSD для команды "ps"

Я читал, что 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.

Связанный контент