В чем разница между процессами, перечисленными ps
и ps -A
?
2 ответа
без -A
ps будет печатать только процессы, принадлежащие текущему сеансу. Думайте об этом как "абсолютно все". В связанной заметке -a
делает то же самое, но ограничивая ее владельцем сеанса (имя пользователя).
Команда GNU ps
страдает от серьезного случая множественного расстройства личности. Поэтому неудивительно, что его страница руководства сбивает с толку. Возможно, поможет просмотр руководств BSD. В конце концов, этот вопрос помечен UNIX.
Работа BSD ps
довольно проста, если иметь в виду две вещи:
- Процессы выбираются для отображения с использованием двух основных фильтров. Эти фильтры включены по умолчанию и параметры командной строки , отключить их. Обычный неукрашенный
ps
, таким образом, фильтруется через оба. - Синтаксис BSD уходит очень далеко. Хотя современные BSD используют
getopt
и соглашение о параметрах с префиксом минус, соответствующие параметры и поведение здесь практически такие же, как и 30 лет назад.
Это поведение таково:
- Опция
-a
(историческиa
) отключает фильтрацию всех "селекторов".- Различные другие параметры командной строки определяют селекторы:
-U
выбирает по UID,-t
управляет именем терминала,-p
выбирает по идентификатору процесса и т.д. Все это обойдено-a
. - Если никакие селекторы не указаны явно, селектор по умолчанию должен отображать только процессы, выполняющиеся с тем же эффективным UID, что и пользователь, вызвавший
ps
. Этот селектор по умолчанию является историческим фильтром, который эта опция отключает.
- Различные другие параметры командной строки определяют селекторы:
- Опция
-x
(историческиx
) отключает ограничение, при которомps
отображает только процессы, которые имеют управляющий терминал.
Исторически, у BSD ps
не было опции A
Но современные BSD реализуют опцию -A
, также используемую как A
, для (степени) совместимости с (более поздней) единой спецификацией UNIX. -A
просто аналогичен использованию -a
и -x
: он отключает оба ограничения, оставляя один со всеми процессами нефильтрованным.
OpenBSD и NetBSD документируют опцию -A
, в случае NetBSD явно как -a -x
. FreeBSD этого не делает, но комментарий в исходном коде гласит, что он есть как намеренно недокументированный вариант совместимости с SUSv5.